Skip to main content

Overview

Postiz provides powerful post scheduling capabilities that allow you to plan and automate your social media content across 28+ platforms. Schedule posts in advance, set optimal posting times, and manage your entire content calendar from one place.

Scheduling Methods

Manual Scheduling

Pick specific dates and times for each post with full control over when content goes live.

Auto-Scheduling

Let Postiz find optimal posting times based on your pre-configured time slots.

Bulk Scheduling

Schedule multiple posts at once with the AI-powered content generator.

Recurring Posts

Set up posts to repeat on a schedule (coming soon).

Creating a Scheduled Post

1

Access the Calendar

Navigate to the Calendar view from the main menu. This is your central hub for all scheduled content.
// Posts are fetched from: /posts endpoint
const { data } = useSWR(`/posts?startDate=${startDate}&endDate=${endDate}`);
2

Add New Post

Click the “New Post” button or click on any time slot in the calendar to create a new post.
The system automatically finds the next available time slot using the /posts/find-slot endpoint.
3

Select Channels

Choose which social media channels to post to. You can select multiple channels for cross-posting.
// Available integrations from backend
integrations: Array<{
  id: string;
  name: string;
  identifier: string; // 'x', 'linkedin', 'facebook', etc.
  picture: string;
  disabled: boolean;
}>
4

Set Publishing Time

Pick your desired date and time. The time picker supports both 12-hour (US) and 24-hour formats.
Use the date/time picker to choose an exact publishing time.
// Time is stored in UTC and converted to local timezone
const publishDate = dayjs.utc(date).local();
5

Create Content

Write your post content, add media, and configure platform-specific settings.
Each platform may have different character limits and media requirements. Postiz automatically validates these for you.
6

Schedule or Publish

Choose to schedule for later or publish immediately.
// POST /posts endpoint
{
  group: string,           // Groups posts scheduled together
  posts: [{
    integration: string,   // Channel ID
    content: string,
    publishDate: string,   // ISO date string
    image: Array<{id, path}>,
    settings: object       // Platform-specific settings
  }]
}

Time Slot Management

Configure optimal posting times for each channel to maximize engagement.

Setting Up Time Slots

1

Open Channel Settings

Right-click on any channel in the calendar sidebar and select “Time Settings”.
2

Add Time Slots

Add multiple time slots throughout the day when you want posts to be scheduled.
// Time slots are stored as minutes from midnight (UTC)
time: [{
  time: number // e.g., 540 = 9:00 AM
}]
3

Save Configuration

Time slots are saved per channel and used for auto-scheduling.
// POST /integrations/:id/time
{
  time: [{ time: 540 }, { time: 720 }, { time: 1080 }]
}
Pro Tip: Set 3-4 time slots per day based on when your audience is most active. This gives the auto-scheduler flexibility while maintaining optimal timing.

Post States

Posts move through different states during their lifecycle:
  • Draft - Post is being created or edited
  • Scheduled - Post is scheduled and waiting to be published
  • Publishing - Post is currently being sent to the platform
  • Published - Post has been successfully published
  • Error - Post failed to publish (can be retried)
  • Deleted - Post has been deleted from the schedule
enum State {
  DRAFT = 'DRAFT',
  SCHEDULED = 'SCHEDULED', 
  PUBLISHING = 'PUBLISHING',
  PUBLISHED = 'PUBLISHED',
  ERROR = 'ERROR',
  DELETED = 'DELETED'
}

Editing Scheduled Posts

You can modify scheduled posts at any time before they’re published:
// GET /posts/group/:group - Fetch post group for editing
const data = await fetch(`/posts/group/${post.group}`).json();

// PUT /posts/:id/date - Change publishing time
await fetch(`/posts/${id}/date`, {
  method: 'PUT',
  body: JSON.stringify({ 
    date: newDate,
    action: 'schedule' // or 'update'
  })
});
Changes to posts scheduled in the next 5 minutes may not take effect if the publishing workflow has already started.

Deleting Scheduled Posts

// DELETE /posts/:group - Delete entire post group
await fetch(`/posts/${group}`, {
  method: 'DELETE'
});

Drag-and-Drop Rescheduling

The calendar view supports drag-and-drop rescheduling:
1

Enable Drag Mode

Posts in the calendar can be dragged to different time slots.
const [{ isDragging }, drag] = useDrag(() => ({
  type: 'post',
  item: { post },
  collect: (monitor) => ({
    isDragging: monitor.isDragging()
  })
}));
2

Drop to Reschedule

Drop the post on a new time slot to automatically reschedule.
const [{ isOver }, drop] = useDrop(() => ({
  accept: 'post',
  drop: (item) => {
    // Update post time via API
    changeDate(item.post.id, newDate);
  }
}));

Timezone Handling

All times are stored in UTC and converted to your local timezone for display:
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.extend(utc);
dayjs.extend(timezone);

// Store in UTC
const utcDate = dayjs(localDate).utc().toISOString();

// Display in local timezone
const localDate = dayjs.utc(utcDate).local().format('YYYY-MM-DD HH:mm');

Best Practices

Plan Ahead

Schedule posts at least 24 hours in advance to avoid last-minute changes.

Use Time Slots

Configure 3-4 optimal time slots per channel for consistent posting.

Review Before Publishing

Always preview your posts before scheduling to catch any errors.

Monitor Post Status

Check your calendar regularly to ensure all posts are publishing successfully.

API Reference

Key endpoints for post scheduling:
EndpointMethodDescription
/postsGETFetch posts for a date range
/postsPOSTCreate new scheduled post
/posts/:idGETGet single post details
/posts/:groupDELETEDelete scheduled post
/posts/:id/datePUTChange post date/time
/posts/find-slotGETFind next available time slot
/posts/find-slot/:idGETFind next slot for specific channel

Next Steps

Calendar View

Learn about the calendar interface and views

AI Features

Use AI to generate and schedule content automatically

Build docs developers (and LLMs) love