Content Queues
Queues enable automated content scheduling by defining time slots and automatically assigning content to them.
Core Concepts
Queue
A named collection of time slots with specific settings:
- Target platforms
- Time zone
- Active/paused status
Time Slot
A recurring publishing time:
- Day of week (or daily)
- Time of day
- Repeat pattern
Queue Item
Content assigned to a queue for automatic scheduling:
- Post content
- Platform override (optional)
- Position in queue
API Endpoints
GET /api/queues
List all queues for the company.
POST /api/queues
Create a new queue.
typescript
{
name: string,
platforms: string[],
timeZone: string,
isActive: boolean,
slots: [{
dayOfWeek: number | null, // 0-6, null for daily
time: string, // HH:MM format
}]
}PUT /api/queues/:id
Update queue settings or slots.
DELETE /api/queues/:id
Delete a queue (items are unscheduled, not deleted).
POST /api/queues/:id/items
Add content to queue.
typescript
{
content: string,
platform?: string,
mediaUrls?: string[]
}DELETE /api/queues/:queueId/items/:itemId
Remove item from queue.
Scheduling Logic
When content is added to a queue:
- Find next available slot (chronologically)
- Calculate exact publish time based on slot + timezone
- Create scheduled post with that time
- Mark slot as "filled" for that occurrence
Slot Filling:
Queue has: Mon 9am, Wed 9am, Fri 9am
Current time: Monday 10am
Next available: Wednesday 9am
Add 3 items → Wed 9am, Fri 9am, Next Mon 9amPause/Resume
Pausing a queue:
- Stops auto-scheduling for new items
- Existing scheduled posts remain scheduled
- Items in queue wait until resumed
Database Schema
prisma
model PublishingQueue {
id String @id
companyId String
name String
platforms String[]
timeZone String
isActive Boolean
slots Json // Array of slot configs
}
model QueueItem {
id String @id
queueId String
content String
platform String?
mediaUrls String[]
position Int
postId String? // Links to scheduled post
}