logo
Schedulin Developers

Queue a post

Each channel can have a posting schedule (its queue) set up in the dashboard. Instead of picking a time yourself, let Schedulin put the post in the next free slot.

Preview the next slots

GET /v0/social-accounts/{id}/next-slots returns upcoming free slot times in UTC, computed from the channel's queue schedule, per-slot capacity, and timezone. limit (default 5, max 50) controls how many; after (ISO 8601) starts the search from a later time.

curl "https://api.schedulin.app/v0/social-accounts/acc_123/next-slots?limit=3" \
  -H "x-api-key: $SCHEDULIN_API_KEY"
{
  "slots": [
    "2026-06-02T09:00:00.000Z",
    "2026-06-02T13:00:00.000Z",
    "2026-06-03T09:00:00.000Z"
  ]
}
const { slots } = await client.socialAccounts.nextSlots({ id: "acc_123", limit: 3 });
slots = client.social_accounts.next_slots("acc_123", limit=3).slots

slots is empty when the channel has no queue times configured.

Add a post to the queue

Create the post with action: "queue" and no scheduledAt. It's scheduled for the next free slot:

curl -X POST https://api.schedulin.app/v0/posts \
  -H "x-api-key: $SCHEDULIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "socialAccountId": "acc_123",
    "caption": "Tip of the day: batch your content on Mondays.",
    "action": "queue"
  }'
const post = await client.posts.create({
  socialAccountId: "acc_123",
  caption: "Tip of the day: batch your content on Mondays.",
  action: "queue",
});
post = client.posts.create(
    social_account_id="acc_123",
    caption="Tip of the day: batch your content on Mondays.",
    action="queue",
)

The response has status: "SCHEDULED" and the chosen scheduledAt. If the channel has no free slot, the request fails with 400 ("No available queue slot found for this social account.") — fall back to action: "schedule" with an explicit scheduledAt, such as one of the slots above.