Skip to content

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:

  1. Find next available slot (chronologically)
  2. Calculate exact publish time based on slot + timezone
  3. Create scheduled post with that time
  4. 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 9am

Pause/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
}

TendSocial Documentation