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 TimePair 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.