The simplest pattern in Socifyr — pass multiple connection slugs in one request and the content fans out automatically.
Same caption everywhere
typescript
await socifyr.uploads.text({
connections: [
'linkedin-myhandle',
'x-myhandle',
'threads-myhandle',
'bluesky-myhandle-bsky-social',
],
text: 'Hot take: monorepos are great if you have one tooling team.',
})Same image, different captions per platform
Use platformOptions to override the text per-connection:
typescript
await socifyr.uploads.photos({
connections: ['instagram-mybrand', 'linkedin-myhandle', 'x-myhandle'],
medias: [readFileSync('banner.jpg')],
text: 'Default caption used for any platform without an override',
platformOptions: {
'instagram-mybrand': {
text: '🎨 Long Instagram caption with emojis and hashtags...\n\n#design #branding',
},
'x-myhandle': {
text: 'Short tweet — link in bio',
},
},
})Different content formats per platform
Make Instagram a Reel, LinkedIn a feed video:
typescript
await socifyr.uploads.video({
connections: ['instagram-mybrand', 'linkedin-myhandle'],
medias: [readFileSync('demo.mp4')],
text: 'New product demo',
platformOptions: {
'instagram-mybrand': { mediaType: 'REELS' },
},
})Posting to all of a platform's accounts
If you've connected three Instagram accounts (instagram-brand-a, instagram-brand-b, instagram-brand-c), list each slug. Socifyr doesn't currently support "post to all Instagram connections" via a wildcard.
typescript
const allInstagram = (await socifyr.workspaces.listConnections(workspaceId))
.filter(c => c.platform === 'instagram')
.map(c => c.slug)
await socifyr.uploads.text({
connections: allInstagram,
text: 'Announcement to every brand account',
})Handling partial failure
typescript
const upload = await socifyr.uploads.text({ connections, text })
const result = await socifyr.uploads.waitForCompletion(upload.id)
const failed = result.channels.filter(c => c.result?.status === 'failed')
if (failed.length > 0) {
console.warn(`Failed on: ${failed.map(c => c.platform).join(', ')}`)
// Retry just the failures
await socifyr.uploads.retry(upload.id)
}