All pages
Powered by GitBook
1 of 8

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Immediate Publishing

Publish content to social networks instantly using the Publer API. This method skips scheduling and sends posts for immediate delivery.

Endpoint

POST /api/v1/posts/schedule/publish

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Workspace ID

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Use the standard bulk structure. Omit scheduled_at under accounts:

{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          // network provider as key, e.g., facebook, twitter etc.
          "[network_provider]": {
            "type": "[content_type]",
            "text": "Post content",
            // Additional properties based on content type
          }
        },
        "accounts": [
          {
            "id": "account_id"
            // No scheduled_at parameter
          }
        ]
      }
    ]
  }
}

Key Fields

  • state: must be "scheduled" for immediate publishing

  • networks: per-network content configuration (facebook, twitter, linkedin, etc.)

  • accounts: list of target account IDs (no scheduled_at timestamp)

Sample Request

curl -X POST https://app.publer.com/api/v1/posts/schedule/publish \
  -H "Authorization: Bearer-API YOUR_API_KEY" \
  -H "Publer-Workspace-Id: YOUR_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "bulk": {
      "state": "scheduled",
      "posts": [
        {
          "networks": {
            "facebook": {
              "type": "status",
              "text": "Just published this update via the Publer API! #RealTimePosting"
            }
          },
          "accounts": [
            { "id": "66db83154e299efa19a2d8eb" }
          ]
        }
      ]
    }
  }'

Sample Response

Status: 200 OK

{ 
   "job_id": "6810dec617eae6d55d7a5e5b"
}

Use the returned job_id to poll /api/v1/job_status/{job_id} until status: "completed".

Important Considerations

  • Delivery Timing

    • Posts are sent as soon as Publer processes the request.

    • Network-side processing may introduce slight delays.

    • Job remains in working state until all targets confirm receipt.

  • Platform Requirements

    • All network-specific content rules still apply (e.g., character limits, media formats).

    • Some networks may perform additional reviews before public display.

    • Ensure the connected accounts have immediate-posting permissions.

Common Issues

Issue

Solution

Rate limiting

Space out immediate publishing requests to avoid triggering platform limits

Authentication errors

Check that social accounts are properly connected and authorized

Content rejection

Review platform guidelines for content that might be flagged

Processing delays

For media posts, allow extra time for media processing

Related Topics

  • Content Types - Details on different content formats

  • Media Handling - Information about uploading and managing media

  • Network Reference - Platform-specific capabilities and limitations

Manual Scheduling

Schedule posts for future publication across one or more social networks using the Publer API.

Endpoint

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Workspace ID for scheduling posts

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Include a valid ISO 8601 scheduled_at timestamp under each account:

{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          // network provider as key, e.g., facebook, twitter, etc
          "facebook": {
            "type": "status",
            "text": "This post was scheduled through the Publer API! #ScheduledContent"
          }
        },
        "accounts": [
          {
            "id": "66db83154e299efa19a2d8eb",
            "scheduled_at": "2025-06-01T09:00:00Z"
          }
        ]
      }
    ]
  }
}

Sample Request

curl -X POST https://app.publer.com/api/v1/posts/schedule \
  -H "Authorization: Bearer-API YOUR_API_KEY" \
  -H "Publer-Workspace-Id: YOUR_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "bulk": {
      "state": "scheduled",
      "posts": [{
        "networks": {
          "facebook": {
            "type": "status",
            "text": "This post was scheduled through the Publer API! #ScheduledContent"
          }
        },
        "accounts": [{
          "id": "66db83154e299efa19a2d8eb",
          "scheduled_at": "2025-06-01T09:00:00Z"
        }]
      }]
    }
  }'

Sample Response

Status: 200 OK

{
  "job_id": "6810dec617eae6d55d7a5e5b"
}

Key Fields

  • state Must be set to "scheduled" for future publishing.

  • accounts[].scheduled_at ISO 8601 timestamp (with Z or offset) specifying when to publish.

  • networks Per-platform content configuration (e.g., facebook, twitter, linkedin).

Important Considerations

Time Formats

  • Use full ISO 8601 format, including timezone (e.g., 2025-06-01T09:00:00+02:00).

  • Timestamps must be at least 1 minute in the future.

Best Practices

  • Buffer Time: Space posts 1–2 minutes apart to avoid collisions.

  • Timezone Awareness: Schedule using your audience’s local time.

  • Batch Scheduling: Combine related posts in a single request for efficiency.

  • Verify: Poll /api/v1/job_status/{job_id} to confirm scheduling success.

Related Topics

  • Content Types - Details on different content formats

  • Auto-Scheduling - Advanced AI-based scheduling options

  • Recurring Posts - Setting up repeating content

  • Network Reference - Platform-specific scheduling limitations

Auto-Scheduling

Automatically pick the optimal posting time for your content within a specified date window. Publer analyzes your posting schedule and audience engagement to fill gaps and maximize reach.

Endpoint

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Workspace ID

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Set auto: true and define range to enable auto-scheduling:

{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Let Publer pick the best time for this post!"
          }
        },
        "accounts": [
          { "id": "ACCOUNT_ID" }
        ],
        "range": {
          "start_date": "2025-05-23T07:45:00Z",
          "end_date":   "2025-05-31T23:59:00Z"
        },
        "auto": true
      }
    ]
  }
}

Key Parameters

Field
Type
Description

auto

boolean

Set to true to enable auto-scheduling

range.start_date

string

Earliest ISO 8601 timestamp for posting (inclusive)

range.end_date

string

Latest ISO 8601 timestamp for posting (inclusive, optional)

share_next

boolean

(Optional) When true, schedule in the very next available slot

Examples

Basic Auto-Scheduling

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "facebook": {
          "type": "status",
          "text": "Let Publer choose the best time!"
        }
      },
      "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
      "range": {
        "start_date": "2025-05-23T07:45:00Z",
        "end_date":   "2025-05-31T23:59:00Z"
      },
      "auto": true
    }]
  }
}

Next Available Slot

Omit end_date and set share_next to schedule at the next open slot:

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "facebook": {
          "type": "status",
          "text": "Post in next available slot"
        }
      },
      "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
      "range": { "start_date": "2025-05-23T07:45:00Z" },
      "share_next": true,
      "auto": true
    }]
  }
}

How It Works

  1. Analyze Schedule: Publer looks at your existing posting queue and calendar.

  2. Identify Slots: Finds open time slots based on your account’s posting schedule.

  3. Optimize: Uses audience engagement data to pick a high-impact time within your range.

  4. Schedule: Creates the post at the selected time.

Use Cases

  • Fill Gaps: Keep your queue full without manual scheduling.

  • Engagement Boost: Leverage data-driven timing for better reach.

  • Bulk Campaigns: Auto-schedule large batches within a window.

  • Hands-Off Workflow: Let Publer handle timing so you focus on content.

Best Practices

  • Define Posting Schedule: Ensure your account has active time slots configured.

  • Reasonable Ranges: Provide a wide enough window for better slot selection.

  • Mix Methods: Combine auto-scheduling with manual posts for flexibility.

  • Monitor Jobs: Poll /api/v1/job_status/{job_id} to confirm success.

Common Issues

Issue
Solution

No available slots

Add or open time slots in your posting schedule within the date range.

Suboptimal timing

Expand the date range or refine your posting schedule.

Data insufficient

Post more content manually to build up engagement metrics.

Related Topics

  • Publishing Methods

  • Scheduled Publishing

  • Recurring Posts

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

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Workspace ID for scheduling posts

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Example Payload:

{
  "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

Field
Type
Description

bulk.state

string

Scheduling mode: "scheduled" (manual schedule), "auto", or "recycle"

bulk.posts

array

Array of up to 500 post objects

posts[].networks

object

Networks and their post data (e.g., Facebook, Mastodon, etc.)

posts[].networks.{network}

object

Post content for each targeted network

posts[].accounts

array

Array of account objects that will receive this post

accounts[].id

string

Target social account ID

accounts[].scheduled_at

string

ISO 8601 time for scheduled post (omit for auto or recycle based on posting schedule)

...

...

All other post options (media, watermarks, signature, location, etc.) supported per post type

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

  • Content Types

  • Media Handling

Draft Posts

Create, manage, and collaborate on draft posts that aren't published immediately. Drafts help you save work-in-progress content, collaborate with your team, and schedule posts for later publishing.

Overview

Publer supports three types of draft states, each with different visibility and account connection requirements:

  • draft - Connected to specific social accounts with optional scheduling

  • draft_public - Workspace-wide drafts visible to all workspace members (posts without social accounts)

  • draft_private - Private drafts visible only to you (posts without social accounts)

Endpoint

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Workspace ID for scheduling posts

Content-Type

Yes

application/json

Accept

No

application/json (default)

Use the same scheduling endpoint—with a draft state—to save work-in-progress content without publishing.

Draft Types & Examples

1. Account-Connected Draft (draft)

Drafts connected to specific social accounts that can optionally include scheduling information.

{
  "bulk": {
    "state": "draft",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "First Draft"
          }
        },
        "accounts": [
          {
            "id": "647a0edddb2797b89044e2c1",
            "scheduled_at": "2025-06-23T10:43:00+02:00"
          }
        ]
      }
    ]
  }
}

Key Features:

  • Must include accounts array with account IDs

  • Can include scheduled_at for future publishing

  • Uses specific network configurations (e.g., facebook, instagram)

2. Public Workspace Draft (draft_public)

Drafts visible to all workspace members for collaboration and review.

{
  "bulk": {
    "state": "draft_public",
    "posts": [
      {
        "networks": {
          "default": {
            "type": "status",
            "text": "Draft"
          }
        }
      }
    ]
  }
}

Key Features:

  • No accounts array required

  • No scheduled_at field

  • Uses default network configuration

  • Visible to all workspace members

3. Private Draft (draft_private)

Drafts visible only to the creator for personal use and planning.

{
  "bulk": {
    "state": "draft_private",
    "posts": [
      {
        "networks": {
          "default": {
            "type": "status",
            "text": "Private Draft"
          }
        }
      }
    ]
  }
}

Key Features:

  • No accounts array required

  • No scheduled_at field

  • Uses default network configuration

  • Visible only to the creator

Parameters

Field
Type
Required
Description

bulk.state

string

Yes

Draft type: "draft", "draft_public", or "draft_private"

posts[].networks

object

Yes

Network configurations for the post

posts[].accounts

array

Only for "draft" state

Array of account objects with IDs and optional scheduling

accounts[].id

string

Yes (when accounts present)

Social account ID

accounts[].scheduled_at

string

No

ISO 8601 timestamp (only for "draft" state)

Network Configuration

  • For draft state: Use specific network keys (facebook, instagram, twitter, etc.)

  • For draft_public and draft_private: Use default as the network key

Best Practices

  • Save Often: Create drafts early in your content creation process to avoid data loss

  • Use Public Drafts for Collaboration: Share draft_public posts with your team for feedback and approvals

  • Pre-schedule Account Drafts: Add scheduled_at to draft posts for seamless transition to scheduled state

  • Organize by Purpose: Use private drafts for personal planning and public drafts for team collaboration

Related Topics

  • Content Types

  • Media Handling

  • Publishing Methods

Recycling Posts

Automatically re-share a post on a regular cadence. Recycling is ideal for evergreen content, reminders, and promotional campaigns.

Endpoint

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Your workspace identifier

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Include a recycling object in your payload:

{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "This content will be recycled multiple times."
          }
        },
        "accounts": [
          { "id": "66f509f7db2797026a37ba76" }
        ],
        "recycling": {
          "solo": true,
          "gap": 2,
          "gap_freq": "Week",
          "start_date": "2025-06-01",
          "expire_count": 3
        }
      }
    ]
  }
}

Recycling Parameters

Field
Type
Description

solo

boolean

true to recycle this post individually (not grouped)

gap

number

Interval between reposts (e.g., 2 for every 2 units)

gap_freq

string

Unit of interval: Day, Week, or Month

start_date

string

ISO date when recycling begins (e.g., YYYY-MM-DD)

expire_count

number

Maximum number of reposts

expire_date

string

ISO date to stop recycling (alternative to expire_count)

Examples

Basic Recycling

Recycle every 2 weeks, up to 3 times:

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "facebook": { "type": "status", "text": "Evergreen reminder!" }
      },
      "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
      "recycling": {
        "gap": 2,
        "gap_freq": "Week",
        "expire_count": 3
      }
    }]
  }
}

Recycling with Expiration Date

Recycle monthly until end of year:

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "default": { "type": "status", "text": "Monthly promotion reminder!" }
      },
      "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
      "recycling": {
        "gap": 1,
        "gap_freq": "Month",
        "start_date": "2025-06-01",
        "expire_date": "2025-12-31"
      }
    }]
  }
}

How It Works

  1. Create a post with recycling settings.

  2. Publer queues the post for reuse.

  3. After each gap interval, the post is republished.

  4. Recycling stops when expire_count or expire_date is reached.

Platform Limitations

Due to API limitations and anti-spam policies, recycling has some platform-specific constraints:

Platform

Recycling Support

Notes

Facebook

Full support

No special requirements

Instagram

Full support

No special requirements

LinkedIn

Full support

No special requirements

Twitter

Limited

Requires 10+ variations using Spintax Generator

Pinterest

Limited

Requires 10+ variations using Spintax Generator

Google Business Profile

Limited

Requires 10+ variations using Spintax Generator

YouTube

Not supported

API limitations

TikTok

Not supported

API limitations

WordPress

Not supported

API limitations

Use Cases

  • Promote evergreen blog posts or resources.

  • Remind followers of ongoing events or offers.

  • Keep your feed active with minimal manual effort.

Best Practices

  • Vary content slightly using Spintax to avoid spam filters.

  • Choose sensible intervals—don’t recycle too frequently.

  • Always set an expiration (expire_count or expire_date).

  • Monitor engagement metrics to adjust recycling strategy.

Recycling vs. Recurring

  • Recycling fills open slots based on gap and gap_freq—ideal for evergreen content.

  • Recurring publishes at exact times on a fixed repeat schedule (e.g., every Monday at 9 AM).

Related Topics

  • Recurring Posts

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

Method
Use Case
Key Parameters
Business Value

Immediate Publishing

Send your post to networks right away.

Endpoint:

Request example:

Implementation Notes

  • Omit scheduled_at entirely

  • Content is processed immediately via the schedule/publish endpoint

  • Supports all content types and network-specific options


Scheduled Publishing

Plan posts for future dates and times across multiple networks.

Endpoint:

Request example:

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


Draft Posts

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

Endpoint:

Request example (private draft):

Visibility Options


Auto-Scheduling

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

Endpoint:

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

  • You need a posting schedule. 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 .

Request example:

Key Auto-Scheduling Parameters


Recycling Content

Automatically repost content multiple times on a defined cadence.

Endpoint:

To Recycle a post:

  • First, you need to create a post and a posting schedule. Click to learn how to set up a new time slot for your posts.

Request example:

Key recycling parameters:


Recurring Posts

Schedule content to repeat on a predefined pattern.

Endpoint:

Request example:


Response Handling

All publishing methods return a job ID for asynchronous processing:

Checking Job Status

Always verify success by checking the job status:

Example success response:

Job Status Values

Advanced Usage Tips

  • Network-specific content: Override content for specific platforms

  • Multi-account publishing: Target multiple accounts in a single request

Immediate

Publish content right away

No scheduled_at

Time-sensitive announcements, breaking news

Scheduled

Publish at specific date/time

scheduled_at

Content calendar planning, timed campaigns

Draft

Save for later use

state: draft

Workspace collaboration, content preparation

Auto-scheduled

Automatically scheduling posts

auto: true

Engagement optimization, workload reduction

Recycled

Reuse content multiple times

recycling object

Evergreen content, extended reach

Recurring

Create repeating posts

recurring object

Regular updates, consistent presence

POST /api/v1/posts/schedule/publish
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Breaking news update!"
          }
        },
        "accounts": [
          {
            "id": "66db83154e299efa19a2d8eb"
            // No scheduled_at parameter
          }
        ]
      }
    ]
  }
}
POST /api/v1/posts/schedule
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Scheduled announcement for next week!"
          }
        },
        "accounts": [
          {
            "id": "66db83154e299efa19a2d8eb",
            "scheduled_at": "2025-05-15T14:30:00Z"
          }
        ]
      }
    ]
  }
}
POST /api/v1/posts/schedule
{
  "bulk": {
    "state": "draft_private",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "status",
            "text": "Draft post for later review"
          }
        },
        "accounts": [
          {
            "id": "66f509f7db2797026a37ba76"
          }
        ]
      }
    ]
  }
}

State Value

Description

Access Control

draft_private

Private draft

Only accessible to the creator

draft_public or draft

Workspace-visible draft

Available to all workspace members with appropriate permissions

POST /api/v1/posts/schedule
{
  "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
      }
    ]
  }
}

Parameter

Type

Required

Description

auto

boolean

Yes

Set to true to enable auto-scheduling

range.start_date

string

Yes

ISO 8601 timestamp for earliest possible posting time

range.end_date

string

No

ISO 8601 timestamp for latest possible posting time

share_next

boolean

No

When true, uses next available optimal slot

POST /api/v1/posts/schedule
{
  "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"
        }
      }
    ]
  }
}

Parameter

Type

Description

recycling.solo

boolean

When true, recycles as individual post; otherwise groups with other recycled content

recycling.gap

number

Frequency number (1, 2, 3, etc.)

recycling.gap_freq

string

Frequency unit (Day, Week, or Month)

recycling.start_date

string

Date to begin recycling (ISO 8601 format)

recycling.expire_count

string or number

Maximum number of times to recycle

recycling.expire_date

string

Date to stop recycling (ISO 8601 format, alternative to count)

POST /api/v1/posts/schedule
{
  "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
        }
      }
    ]
  }
}

Parameter

Type

Required

Description

state

string

Yes

Must be set to recurring

recurring.start_date

string

Yes

First occurrence date (ISO 8601 format)

recurring.end_date

string

No

Last occurrence date (ISO 8601 format)

recurring.repeat

string

Yes

Frequency type: daily, weekly, or monthly

recurring.days_of_week

array

For weekly

Array of weekdays (1=Monday, 7=Sunday)

recurring.repeat_rate

number

No

How often to repeat (e.g., 1=every week, 2=every other week)

recurring.time

string

No

Fixed time for posts (format: "HH:MM")

{
   "job_id": "6810dec617eae6d55d7a5e5b"
}
GET /api/v1/job_status/6810dec617eae6d55d7a5e5b
{
    "status": "complete",
    "payload": {
        "failures": {}
    },
    "plan": {
        // Current user's plan details
    }
}

Status

Description

Next Action

working

Job is still being processed

Wait and check again

complete

Job finished (check failures object for partial failures)

Review results

failed

Job failed completely

Check error details and retry

Learn more about immediate publishing
Learn more about scheduled publishing
Learn more about draft posts
Posting schedules
Duplicating Settings
Learn more about auto-scheduling
here
Learn more about recycle posts
Learn more about recurring posts

Recurring Posts

Automatically publish the same post at regular intervals, indefinitely or until a specified stop condition.

Endpoint

POST /api/v1/posts/schedule

Request Headers

Header
Required
Description

Authorization

Yes

Bearer-API YOUR_API_KEY

Publer-Workspace-Id

Yes

Your workspace identifier

Content-Type

Yes

application/json

Accept

No

application/json (default)

Request Body

Include a recurring object under each post:

{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "default": {
            "type": "status",
            "text": "Weekly reminder: Check our latest updates every Monday!"
          }
        },
        "accounts": [
          { "id": "ACCOUNT_ID" }
        ],
        "recurring": {
          "frequency": "Week",
          "repeat_every": 1,
          "start_date": "2025-06-02T09:00:00Z",
          "weekdays": ["Monday"]
        }
      }
    ]
  }
}

Recurring Parameters

Field
Type
Description

frequency

string

Unit of recurrence: Day, Week, Month, or Year

repeat_every

integer

Interval between posts (e.g., 1 for every week, 2 for every 2 weeks)

start_date

string

ISO 8601 timestamp for the first occurrence

weekdays

array

Days of week for weekly recurrence (e.g., ["Monday", "Wednesday"])

days

array

Days of month for monthly/yearly recurrence (e.g., [1, 15, 28])

end_date

string

ISO 8601 timestamp to stop recurrence (optional)

occurrences

integer

Maximum number of total occurrences (optional)

Examples

Weekly Recurring Post

Every Monday at 9:00 AM:

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "facebook": {
          "type": "status",
          "text": "Weekly reminder: Check our latest updates every Monday!"
        }
      },
      "accounts": [{
        "id": "66f509f7db2797026a37ba76"
      }],
      "recurring": {
        "frequency": "Week",
        "repeat_every": 1,
        "start_date": "2025-06-02T09:00:00Z",
        "weekdays": ["Monday"]
      }
    }]
  }
}

Biweekly Recurring with Limit

Every other Tuesday and Thursday, for 10 occurrences:

{
  "bulk": {
    "state": "scheduled",
    "posts": [{
      "networks": {
        "facebook": {
          "type": "status",
          "text": "Biweekly product update: See what's improved!"
        }
      },
      "accounts": [{
        "id": "66f509f7db2797026a37ba76"
      }],
      "recurring": {
        "frequency": "Week",
        "repeat_every": 2,
        "start_date": "2025-06-03T15:30:00Z",
        "weekdays": ["Tuesday", "Thursday"],
        "occurrences": 10
      }
    }]
  }
}

How It Works

  1. Create a post with recurring settings.

  2. Schedule first occurrence at start_date.

  3. Generate subsequent posts at each interval (repeat_every + frequency).

  4. Stop when reaching occurrences count or passing end_date.

Platform Support

Platform

Recurring Support

Notes

Facebook

Full support

No special requirements

Instagram

Full support

No special requirements

LinkedIn

Full support

No special requirements

Twitter

Limited

Requires 10+ variations using Spintax Generator

Pinterest

Limited

Requires 10+ variations using Spintax Generator

Google Business Profile

Limited

Requires 10+ variations using Spintax Generator

YouTube

Not supported

API limitations

TikTok

Not supported

API limitations

WordPress

Not supported

API limitations

Use Cases

  • Regular reminders (e.g., weekly tips).

  • Monthly newsletters or reports.

  • Annual event notifications (e.g., holidays).

  • Routine promotions or offers.

Best Practices

  • Evergreen Content: Use for timeless messages that benefit from repetition.

  • Stop Conditions: Always set end_date or occurrences to avoid indefinite runs.

  • Combine Actions: Add follow-up comments or auto-deletion for full lifecycle management.

  • Audience Consideration: Avoid fatigue by spacing posts appropriately.

Recurring vs. Recycling

  • Recurring Posts: Fixed dates/times on a repeating schedule.

  • Recycling Posts: Fills open slots based on your posting calendar.

Related Topics

  • Recycling Posts

  • Scheduled Publishing

  • Auto-Scheduling