Skip to content

Queues API Reference

The Queues API lets you create and manage posting queues. Queues automatically schedule posts into recurring weekly timeslots, with priority-based ordering.

MethodEndpointDescription
GET/api/post_queuesList all queues
GET/api/post_queues/:idGet a single queue
GET/api/post_queues/:id/next_slotGet next available timeslot
POST/api/post_queuesCreate a new queue
PATCH/api/post_queues/:idUpdate a queue
DELETE/api/post_queues/:idDelete a queue

Each queue has a set of weekly timeslots that define when posts are published. A timeslot is a combination of a day of the week (0=Sunday through 6=Saturday) and a time in 24-hour HH:MM format. Times are interpreted in the queue’s timezone.

Posts added to a queue have a priority level that determines scheduling order:

PriorityDescription
highScheduled first — gets the earliest available slot
mediumDefault priority
lowScheduled last — fills remaining slots

Within the same priority level, posts are ordered by creation time (oldest first).

The queue automatically rearranges all scheduled posts when:

  • A new post is added to the queue
  • A post is removed from the queue
  • Timeslots are added or removed
  • The queue’s timezone is changed
  • The queue is unpaused

Queues support a jitter parameter (0–60 minutes) that randomly shifts each post’s scheduled time by +/- the specified number of minutes. This makes posting patterns look more natural and less automated.

For example, with jitter: 10 and a timeslot at 09:00, posts will be scheduled anywhere between 08:50 and 09:10.

Jitter is applied when the queue is arranged — when posts are added, removed, or when queue settings change.

When a queue is paused (enabled: false), posts in the queue will not be published even if their scheduled time arrives. When the queue is unpaused, all posts (including those that became past-due while paused) are rearranged into future timeslots.


GET /api/post_queues

Retrieves all queues for the current account.

ParameterTypeRequiredDescription
profile_group_idstringNoFilter by profile group (ID)
Terminal window
curl -X GET "https://api.postproxy.dev/api/post_queues" \
-H "Authorization: Bearer your_api_key"
{
"data": [
{
"id": "q1abc",
"name": "Morning Posts",
"description": "Daily morning content",
"timezone": "America/New_York",
"enabled": true,
"jitter": 10,
"profile_group_id": "pg123",
"timeslots": [
{ "id": 1, "day": 1, "time": "09:00" },
{ "id": 2, "day": 3, "time": "09:00" },
{ "id": 3, "day": 5, "time": "14:00" }
],
"posts_count": 5
}
]
}

GET /api/post_queues/:id

Retrieves a single queue by its ID.

Terminal window
curl -X GET "https://api.postproxy.dev/api/post_queues/q1abc" \
-H "Authorization: Bearer your_api_key"
FieldTypeDescription
idstringQueue identifier (ID)
namestringQueue name
descriptionstring|nullOptional description
timezonestringIANA timezone name (e.g. America/New_York)
enabledbooleanWhether the queue is active
jitterintegerRandom offset in minutes (+/-) applied to scheduled times (0–60, default: 0)
profile_group_idstringAssociated profile group (ID)
timeslotsarrayWeekly timeslot definitions
posts_countintegerNumber of currently scheduled posts
FieldTypeDescription
idintegerTimeslot ID (used for deletion)
dayintegerDay of the week: 0=Sunday, 1=Monday, …, 6=Saturday
timestringTime in 24-hour HH:MM format

GET /api/post_queues/:id/next_slot

Returns the next available timeslot for the queue.

Terminal window
curl -X GET "https://api.postproxy.dev/api/post_queues/q1abc/next_slot" \
-H "Authorization: Bearer your_api_key"
{
"next_slot": "2026-03-11T14:00:00Z"
}

No timeslots configured (422):

{
"error": "No available slots found. Add timeslots to your queue."
}

POST /api/post_queues

Creates a new posting queue connected to a profile group.

ParameterTypeRequiredDescription
profile_group_idstringYesProfile group ID to connect the queue to
post_queue[name]stringYesQueue name
post_queue[description]stringNoOptional description
post_queue[timezone]stringNoIANA timezone (default: UTC)
post_queue[jitter]integerNoRandom offset in minutes (0–60, default: 0)
post_queue[queue_timeslots_attributes]arrayNoInitial timeslots
Terminal window
curl -X POST "https://api.postproxy.dev/api/post_queues" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"profile_group_id": "pg123",
"post_queue": {
"name": "Morning Posts",
"description": "Weekday morning content",
"timezone": "America/New_York",
"queue_timeslots_attributes": [
{ "day": 1, "time": "09:00" },
{ "day": 2, "time": "09:00" },
{ "day": 3, "time": "09:00" },
{ "day": 4, "time": "09:00" },
{ "day": 5, "time": "09:00" }
]
}
}'

Returns the created queue object (same format as Get Queue).


PATCH /api/post_queues/:id

Updates a queue’s settings, timeslots, or enabled state. Any changes to timezone or timeslots will trigger a rearrangement of all queued posts.

ParameterTypeRequiredDescription
post_queue[name]stringNoQueue name
post_queue[description]stringNoDescription
post_queue[timezone]stringNoIANA timezone
post_queue[enabled]booleanNoPause (false) or unpause (true) the queue
post_queue[jitter]integerNoRandom offset in minutes (0–60)
post_queue[queue_timeslots_attributes]arrayNoAdd/remove timeslots

Add a timeslot:

{
"post_queue": {
"queue_timeslots_attributes": [
{ "day": 2, "time": "10:00" }
]
}
}

Remove a timeslot (pass id and _destroy: true):

{
"post_queue": {
"queue_timeslots_attributes": [
{ "id": 42, "_destroy": true }
]
}
}
Terminal window
curl -X PATCH "https://api.postproxy.dev/api/post_queues/q1abc" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{ "post_queue": { "enabled": false } }'
Terminal window
curl -X PATCH "https://api.postproxy.dev/api/post_queues/q1abc" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{ "post_queue": { "timezone": "America/Los_Angeles" } }'

Returns the updated queue object.


DELETE /api/post_queues/:id

Deletes a queue. Posts that were in the queue will have their queue reference removed but will not be deleted.

Terminal window
curl -X DELETE "https://api.postproxy.dev/api/post_queues/q1abc" \
-H "Authorization: Bearer your_api_key"
{
"deleted": true
}

To add a post to a queue, pass the queue_id parameter when creating a post via the Posts API:

Terminal window
curl -X POST "https://api.postproxy.dev/api/posts" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"post": {
"body": "Queued post content"
},
"profiles": ["twitter", "linkedin"],
"queue_id": "q1abc",
"queue_priority": "high"
}'
ParameterTypeRequiredDefaultDescription
queue_idstringYes-Queue ID
queue_prioritystringNomediumPriority: high, medium, or low

The post will be assigned to the next available timeslot. After saving, the queue is rearranged so that higher-priority posts get earlier slots.

Posts created via a queue include additional fields:

FieldTypeDescription
queue_idstringQueue ID the post belongs to
queue_prioritystringPriority level: high, medium, or low
scheduled_atstringAssigned timeslot (ISO 8601)