Skip to content

Set scheduledAt on any upload to defer publishing.

typescript
await socifyr.uploads.text({
  connections: ['linkedin-myhandle'],
  text: 'Deploy at 9am tomorrow',
  scheduledAt: '2026-06-01T09:00:00Z',
})

Time zones

scheduledAt is always ISO-8601. You can include a UTC offset directly:

typescript
scheduledAt: '2026-06-01T09:00:00-04:00' // Eastern Daylight Time

Pair with timezone (IANA name) to control display formatting in the dashboard:

typescript
{
  scheduledAt: '2026-06-01T09:00:00Z',
  timezone: 'America/New_York',
}

Rescheduling

Update the scheduledAt on the draft / scheduled post:

typescript
await socifyr.uploads.update(uploadId, {
  scheduledAt: '2026-06-02T09:00:00Z',
})

Publishing immediately

To bypass the schedule and post now:

typescript
await socifyr.uploads.publishNow(uploadId)

Cancelling a scheduled post

typescript
await socifyr.uploads.cancel(uploadId)

Listing what's scheduled

typescript
const scheduled = await socifyr.uploads.list({
  status: 'scheduled',
  from: new Date().toISOString(),
})

Bulk-scheduling

Schedule a content calendar with one loop:

typescript
const posts = [
  { date: '2026-06-01T09:00:00Z', text: 'Monday: shipping update' },
  { date: '2026-06-03T09:00:00Z', text: 'Wednesday: tech deep-dive' },
  { date: '2026-06-05T09:00:00Z', text: 'Friday: recap' },
]

await Promise.all(
  posts.map(p =>
    socifyr.uploads.text({
      connections: ['linkedin-myhandle'],
      text: p.text,
      scheduledAt: p.date,
    }),
  ),
)

Recurring posts

Socifyr doesn't have a built-in cron. For "post every Monday at 9am", run a cron in your own infra that calls the SDK once per occurrence — keeps the scheduling logic in your hands.