@getlatedev/node 0.1.22 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -169,154 +169,154 @@ try {
169
169
  ### Posts
170
170
  | Method | Description |
171
171
  |--------|-------------|
172
- | `posts.listPosts()` | List posts visible to the authenticated user |
173
- | `posts.bulkUploadPosts()` | Validate and schedule multiple posts from CSV |
174
- | `posts.createPost()` | Create a draft, scheduled, or immediate post |
175
- | `posts.getPost()` | Get a single post |
176
- | `posts.updatePost()` | Update a post |
177
- | `posts.deletePost()` | Delete a post |
178
- | `posts.retryPost()` | Retry publishing a failed or partial post |
179
- | `posts.unpublishPost()` | Delete a published post from a social media platform |
172
+ | `posts.listPosts()` | List posts |
173
+ | `posts.bulkUploadPosts()` | Bulk upload from CSV |
174
+ | `posts.createPost()` | Create post |
175
+ | `posts.getPost()` | Get post |
176
+ | `posts.updatePost()` | Update post |
177
+ | `posts.deletePost()` | Delete post |
178
+ | `posts.retryPost()` | Retry failed post |
179
+ | `posts.unpublishPost()` | Unpublish post |
180
180
 
181
181
  ### Accounts
182
182
  | Method | Description |
183
183
  |--------|-------------|
184
- | `accounts.getAllAccountsHealth()` | Check health of all connected accounts |
185
- | `accounts.listAccounts()` | List connected social accounts |
186
- | `accounts.getAccountHealth()` | Check health of a specific account |
187
- | `accounts.getFollowerStats()` | Get follower stats and growth metrics |
188
- | `accounts.getGoogleBusinessReviews()` | Get Google Business Profile reviews |
189
- | `accounts.getLinkedInMentions()` | Resolve a LinkedIn profile or company URL to a URN for @mentions |
190
- | `accounts.updateAccount()` | Update a social account |
191
- | `accounts.deleteAccount()` | Disconnect a social account |
184
+ | `accounts.getAllAccountsHealth()` | Check accounts health |
185
+ | `accounts.listAccounts()` | List accounts |
186
+ | `accounts.getAccountHealth()` | Check account health |
187
+ | `accounts.getFollowerStats()` | Get follower stats |
188
+ | `accounts.getGoogleBusinessReviews()` | Get reviews |
189
+ | `accounts.getLinkedInMentions()` | Resolve LinkedIn mention |
190
+ | `accounts.updateAccount()` | Update account |
191
+ | `accounts.deleteAccount()` | Disconnect account |
192
192
 
193
193
  ### Profiles
194
194
  | Method | Description |
195
195
  |--------|-------------|
196
- | `profiles.listProfiles()` | List profiles visible to the authenticated user |
197
- | `profiles.createProfile()` | Create a new profile |
198
- | `profiles.getProfile()` | Get a profile by id |
199
- | `profiles.updateProfile()` | Update a profile |
200
- | `profiles.deleteProfile()` | Delete a profile (must have no connected accounts) |
196
+ | `profiles.listProfiles()` | List profiles |
197
+ | `profiles.createProfile()` | Create profile |
198
+ | `profiles.getProfile()` | Get profile |
199
+ | `profiles.updateProfile()` | Update profile |
200
+ | `profiles.deleteProfile()` | Delete profile |
201
201
 
202
202
  ### Analytics
203
203
  | Method | Description |
204
204
  |--------|-------------|
205
- | `analytics.getAnalytics()` | Unified analytics for posts |
206
- | `analytics.getLinkedInAggregateAnalytics()` | Get aggregate analytics for a LinkedIn personal account |
207
- | `analytics.getLinkedInPostAnalytics()` | Get analytics for a specific LinkedIn post by URN |
208
- | `analytics.getYouTubeDailyViews()` | YouTube daily views breakdown |
205
+ | `analytics.getAnalytics()` | Get post analytics |
206
+ | `analytics.getLinkedInAggregateAnalytics()` | Get LinkedIn aggregate stats |
207
+ | `analytics.getLinkedInPostAnalytics()` | Get LinkedIn post stats |
208
+ | `analytics.getYouTubeDailyViews()` | Get YouTube daily views |
209
209
 
210
210
  ### Account Groups
211
211
  | Method | Description |
212
212
  |--------|-------------|
213
- | `accountGroups.listAccountGroups()` | List account groups for the authenticated user |
214
- | `accountGroups.createAccountGroup()` | Create a new account group |
215
- | `accountGroups.updateAccountGroup()` | Update an account group |
216
- | `accountGroups.deleteAccountGroup()` | Delete an account group |
213
+ | `accountGroups.listAccountGroups()` | List groups |
214
+ | `accountGroups.createAccountGroup()` | Create group |
215
+ | `accountGroups.updateAccountGroup()` | Update group |
216
+ | `accountGroups.deleteAccountGroup()` | Delete group |
217
217
 
218
218
  ### Queue
219
219
  | Method | Description |
220
220
  |--------|-------------|
221
- | `queue.listQueueSlots()` | Get queue schedules for a profile |
222
- | `queue.createQueueSlot()` | Create a new queue for a profile |
223
- | `queue.getNextQueueSlot()` | Preview the next available queue slot (informational only) |
224
- | `queue.updateQueueSlot()` | Create or update a queue schedule |
225
- | `queue.deleteQueueSlot()` | Delete a queue schedule |
226
- | `queue.previewQueue()` | Preview upcoming queue slots for a profile |
221
+ | `queue.listQueueSlots()` | List schedules |
222
+ | `queue.createQueueSlot()` | Create schedule |
223
+ | `queue.getNextQueueSlot()` | Get next available slot |
224
+ | `queue.updateQueueSlot()` | Update schedule |
225
+ | `queue.deleteQueueSlot()` | Delete schedule |
226
+ | `queue.previewQueue()` | Preview upcoming slots |
227
227
 
228
228
  ### Webhooks
229
229
  | Method | Description |
230
230
  |--------|-------------|
231
- | `webhooks.createWebhookSettings()` | Create a new webhook |
232
- | `webhooks.getWebhookLogs()` | Get webhook delivery logs |
233
- | `webhooks.getWebhookSettings()` | List all webhooks |
234
- | `webhooks.updateWebhookSettings()` | Update a webhook |
235
- | `webhooks.deleteWebhookSettings()` | Delete a webhook |
231
+ | `webhooks.createWebhookSettings()` | Create webhook |
232
+ | `webhooks.getWebhookLogs()` | Get delivery logs |
233
+ | `webhooks.getWebhookSettings()` | List webhooks |
234
+ | `webhooks.updateWebhookSettings()` | Update webhook |
235
+ | `webhooks.deleteWebhookSettings()` | Delete webhook |
236
236
  | `webhooks.testWebhook()` | Send test webhook |
237
237
 
238
238
  ### API Keys
239
239
  | Method | Description |
240
240
  |--------|-------------|
241
- | `apiKeys.listApiKeys()` | List API keys for the current user |
242
- | `apiKeys.createApiKey()` | Create a new API key |
243
- | `apiKeys.deleteApiKey()` | Delete an API key |
241
+ | `apiKeys.listApiKeys()` | List keys |
242
+ | `apiKeys.createApiKey()` | Create key |
243
+ | `apiKeys.deleteApiKey()` | Delete key |
244
244
 
245
245
  ### Media
246
246
  | Method | Description |
247
247
  |--------|-------------|
248
- | `media.getMediaPresignedUrl()` | Get a presigned URL for direct file upload (up to 5GB) |
248
+ | `media.getMediaPresignedUrl()` | Get presigned upload URL |
249
249
 
250
250
  ### Tools
251
251
  | Method | Description |
252
252
  |--------|-------------|
253
- | `tools.getYouTubeTranscript()` | Get YouTube video transcript |
254
- | `tools.checkInstagramHashtags()` | Check Instagram hashtags for bans |
255
- | `tools.downloadBlueskyMedia()` | Download Bluesky video |
253
+ | `tools.getYouTubeTranscript()` | Get YouTube transcript |
254
+ | `tools.checkInstagramHashtags()` | Check Instagram hashtag bans |
255
+ | `tools.downloadBlueskyMedia()` | Download Bluesky media |
256
256
  | `tools.downloadFacebookVideo()` | Download Facebook video |
257
- | `tools.downloadInstagramMedia()` | Download Instagram reel or post |
257
+ | `tools.downloadInstagramMedia()` | Download Instagram media |
258
258
  | `tools.downloadLinkedInVideo()` | Download LinkedIn video |
259
259
  | `tools.downloadTikTokVideo()` | Download TikTok video |
260
- | `tools.downloadTwitterMedia()` | Download Twitter/X video |
261
- | `tools.downloadYouTubeVideo()` | Download YouTube video or audio |
260
+ | `tools.downloadTwitterMedia()` | Download Twitter/X media |
261
+ | `tools.downloadYouTubeVideo()` | Download YouTube video |
262
262
 
263
263
  ### Users
264
264
  | Method | Description |
265
265
  |--------|-------------|
266
- | `users.listUsers()` | List team users (root + invited) |
267
- | `users.getUser()` | Get user by id (self or invited) |
266
+ | `users.listUsers()` | List users |
267
+ | `users.getUser()` | Get user |
268
268
 
269
269
  ### Usage
270
270
  | Method | Description |
271
271
  |--------|-------------|
272
- | `usage.getUsageStats()` | Get plan and usage stats for current account |
272
+ | `usage.getUsageStats()` | Get plan and usage stats |
273
273
 
274
274
  ### Logs
275
275
  | Method | Description |
276
276
  |--------|-------------|
277
- | `logs.listConnectionLogs()` | Get connection logs |
278
- | `logs.listLogs()` | Get publishing logs (deprecated) |
279
- | `logs.listPostsLogs()` | Get publishing logs |
280
- | `logs.getLog()` | Get a single log entry |
281
- | `logs.getPostLogs()` | Get logs for a specific post |
277
+ | `logs.listConnectionLogs()` | List connection logs |
278
+ | `logs.listLogs()` | List publishing logs (deprecated) |
279
+ | `logs.listPostsLogs()` | List publishing logs |
280
+ | `logs.getLog()` | Get log entry |
281
+ | `logs.getPostLogs()` | Get post logs |
282
282
 
283
283
  ### Connect (OAuth)
284
284
  | Method | Description |
285
285
  |--------|-------------|
286
- | `connect.listFacebookPages()` | List Facebook Pages after OAuth (Headless Mode) |
287
- | `connect.listGoogleBusinessLocations()` | List Google Business Locations after OAuth (Headless Mode) |
288
- | `connect.listLinkedInOrganizations()` | Fetch full LinkedIn organization details (Headless Mode) |
289
- | `connect.listPinterestBoardsForSelection()` | List Pinterest Boards after OAuth (Headless Mode) |
290
- | `connect.listSnapchatProfiles()` | List Snapchat Public Profiles after OAuth (Headless Mode) |
291
- | `connect.getConnectUrl()` | Start OAuth connection for a platform |
292
- | `connect.getFacebookPages()` | List available Facebook pages for a connected account |
293
- | `connect.getGmbLocations()` | List available Google Business Profile locations for a connected account |
294
- | `connect.getLinkedInOrganizations()` | Get available LinkedIn organizations for a connected account |
295
- | `connect.getPendingOAuthData()` | Fetch pending OAuth selection data (Headless Mode) |
296
- | `connect.getPinterestBoards()` | List Pinterest boards for a connected account |
297
- | `connect.getRedditFlairs()` | List available post flairs for a Reddit subreddit |
298
- | `connect.getRedditSubreddits()` | List Reddit subreddits for a connected account |
299
- | `connect.getTelegramConnectStatus()` | Generate Telegram access code |
300
- | `connect.updateFacebookPage()` | Update selected Facebook page for a connected account |
301
- | `connect.updateGmbLocation()` | Update selected Google Business Profile location for a connected account |
302
- | `connect.updateLinkedInOrganization()` | Switch LinkedIn account type (personal/organization) |
303
- | `connect.updatePinterestBoards()` | Set default Pinterest board on the connection |
304
- | `connect.updateRedditSubreddits()` | Set default subreddit on the connection |
305
- | `connect.completeTelegramConnect()` | Check Telegram connection status |
306
- | `connect.connectBlueskyCredentials()` | Connect Bluesky using app password |
307
- | `connect.handleOAuthCallback()` | Complete OAuth token exchange manually (for server-side flows) |
308
- | `connect.initiateTelegramConnect()` | Direct Telegram connection (power users) |
309
- | `connect.selectFacebookPage()` | Select a Facebook Page to complete the connection (Headless Mode) |
310
- | `connect.selectGoogleBusinessLocation()` | Select a Google Business location to complete the connection (Headless Mode) |
311
- | `connect.selectLinkedInOrganization()` | Select LinkedIn organization or personal account after OAuth |
312
- | `connect.selectPinterestBoard()` | Select a Pinterest Board to complete the connection (Headless Mode) |
313
- | `connect.selectSnapchatProfile()` | Select a Snapchat Public Profile to complete the connection (Headless Mode) |
286
+ | `connect.listFacebookPages()` | List Facebook pages |
287
+ | `connect.listGoogleBusinessLocations()` | List Google Business locations |
288
+ | `connect.listLinkedInOrganizations()` | List LinkedIn orgs |
289
+ | `connect.listPinterestBoardsForSelection()` | List Pinterest boards |
290
+ | `connect.listSnapchatProfiles()` | List Snapchat profiles |
291
+ | `connect.getConnectUrl()` | Get OAuth connect URL |
292
+ | `connect.getFacebookPages()` | List Facebook pages |
293
+ | `connect.getGmbLocations()` | List Google Business locations |
294
+ | `connect.getLinkedInOrganizations()` | List LinkedIn orgs |
295
+ | `connect.getPendingOAuthData()` | Get pending OAuth data |
296
+ | `connect.getPinterestBoards()` | List Pinterest boards |
297
+ | `connect.getRedditFlairs()` | List subreddit flairs |
298
+ | `connect.getRedditSubreddits()` | List Reddit subreddits |
299
+ | `connect.getTelegramConnectStatus()` | Generate Telegram code |
300
+ | `connect.updateFacebookPage()` | Update Facebook page |
301
+ | `connect.updateGmbLocation()` | Update Google Business location |
302
+ | `connect.updateLinkedInOrganization()` | Switch LinkedIn account type |
303
+ | `connect.updatePinterestBoards()` | Set default Pinterest board |
304
+ | `connect.updateRedditSubreddits()` | Set default subreddit |
305
+ | `connect.completeTelegramConnect()` | Check Telegram status |
306
+ | `connect.connectBlueskyCredentials()` | Connect Bluesky account |
307
+ | `connect.handleOAuthCallback()` | Complete OAuth callback |
308
+ | `connect.initiateTelegramConnect()` | Connect Telegram directly |
309
+ | `connect.selectFacebookPage()` | Select Facebook page |
310
+ | `connect.selectGoogleBusinessLocation()` | Select Google Business location |
311
+ | `connect.selectLinkedInOrganization()` | Select LinkedIn org |
312
+ | `connect.selectPinterestBoard()` | Select Pinterest board |
313
+ | `connect.selectSnapchatProfile()` | Select Snapchat profile |
314
314
 
315
315
  ### Reddit
316
316
  | Method | Description |
317
317
  |--------|-------------|
318
- | `reddit.getRedditFeed()` | Fetch subreddit feed via a connected account |
319
- | `reddit.searchReddit()` | Search Reddit posts via a connected account |
318
+ | `reddit.getRedditFeed()` | Get subreddit feed |
319
+ | `reddit.searchReddit()` | Search posts |
320
320
 
321
321
  ### Account Settings
322
322
  | Method | Description |
@@ -334,69 +334,69 @@ try {
334
334
  ### Comments (Inbox)
335
335
  | Method | Description |
336
336
  |--------|-------------|
337
- | `comments.listInboxComments()` | List posts with comments across all accounts |
338
- | `comments.getInboxPostComments()` | Get comments for a post |
339
- | `comments.deleteInboxComment()` | Delete a comment |
340
- | `comments.hideInboxComment()` | Hide a comment |
341
- | `comments.likeInboxComment()` | Like a comment |
342
- | `comments.replyToInboxPost()` | Reply to a post or comment |
343
- | `comments.sendPrivateReplyToComment()` | Send private reply to comment author |
344
- | `comments.unhideInboxComment()` | Unhide a comment |
345
- | `comments.unlikeInboxComment()` | Unlike a comment |
337
+ | `comments.listInboxComments()` | List commented posts |
338
+ | `comments.getInboxPostComments()` | Get post comments |
339
+ | `comments.deleteInboxComment()` | Delete comment |
340
+ | `comments.hideInboxComment()` | Hide comment |
341
+ | `comments.likeInboxComment()` | Like comment |
342
+ | `comments.replyToInboxPost()` | Reply to comment |
343
+ | `comments.sendPrivateReplyToComment()` | Send private reply |
344
+ | `comments.unhideInboxComment()` | Unhide comment |
345
+ | `comments.unlikeInboxComment()` | Unlike comment |
346
346
 
347
347
  ### GMB Attributes
348
348
  | Method | Description |
349
349
  |--------|-------------|
350
- | `gmbAttributes.getGoogleBusinessAttributes()` | Get Google Business Profile location attributes |
351
- | `gmbAttributes.updateGoogleBusinessAttributes()` | Update Google Business Profile location attributes |
350
+ | `gmbAttributes.getGoogleBusinessAttributes()` | Get attributes |
351
+ | `gmbAttributes.updateGoogleBusinessAttributes()` | Update attributes |
352
352
 
353
353
  ### GMB Food Menus
354
354
  | Method | Description |
355
355
  |--------|-------------|
356
- | `gmbFoodMenus.getGoogleBusinessFoodMenus()` | Get Google Business Profile food menus |
357
- | `gmbFoodMenus.updateGoogleBusinessFoodMenus()` | Update Google Business Profile food menus |
356
+ | `gmbFoodMenus.getGoogleBusinessFoodMenus()` | Get food menus |
357
+ | `gmbFoodMenus.updateGoogleBusinessFoodMenus()` | Update food menus |
358
358
 
359
359
  ### GMB Location Details
360
360
  | Method | Description |
361
361
  |--------|-------------|
362
- | `gmbLocationDetails.getGoogleBusinessLocationDetails()` | Get Google Business Profile location details |
363
- | `gmbLocationDetails.updateGoogleBusinessLocationDetails()` | Update Google Business Profile location details |
362
+ | `gmbLocationDetails.getGoogleBusinessLocationDetails()` | Get location details |
363
+ | `gmbLocationDetails.updateGoogleBusinessLocationDetails()` | Update location details |
364
364
 
365
365
  ### GMB Media
366
366
  | Method | Description |
367
367
  |--------|-------------|
368
- | `gmbMedia.listGoogleBusinessMedia()` | List Google Business Profile media (photos) |
369
- | `gmbMedia.createGoogleBusinessMedia()` | Upload a photo to Google Business Profile |
370
- | `gmbMedia.deleteGoogleBusinessMedia()` | Delete a photo from Google Business Profile |
368
+ | `gmbMedia.listGoogleBusinessMedia()` | List media |
369
+ | `gmbMedia.createGoogleBusinessMedia()` | Upload photo |
370
+ | `gmbMedia.deleteGoogleBusinessMedia()` | Delete photo |
371
371
 
372
372
  ### GMB Place Actions
373
373
  | Method | Description |
374
374
  |--------|-------------|
375
- | `gmbPlaceActions.listGoogleBusinessPlaceActions()` | List place action links (booking, ordering, reservations) |
376
- | `gmbPlaceActions.createGoogleBusinessPlaceAction()` | Create a place action link (booking, ordering, reservation) |
377
- | `gmbPlaceActions.deleteGoogleBusinessPlaceAction()` | Delete a place action link |
375
+ | `gmbPlaceActions.listGoogleBusinessPlaceActions()` | List action links |
376
+ | `gmbPlaceActions.createGoogleBusinessPlaceAction()` | Create action link |
377
+ | `gmbPlaceActions.deleteGoogleBusinessPlaceAction()` | Delete action link |
378
378
 
379
379
  ### Messages (Inbox)
380
380
  | Method | Description |
381
381
  |--------|-------------|
382
- | `messages.listInboxConversations()` | List conversations across all accounts |
383
- | `messages.getInboxConversation()` | Get conversation details |
384
- | `messages.getInboxConversationMessages()` | Get messages in a conversation |
382
+ | `messages.listInboxConversations()` | List conversations |
383
+ | `messages.getInboxConversation()` | Get conversation |
384
+ | `messages.getInboxConversationMessages()` | List messages |
385
385
  | `messages.updateInboxConversation()` | Update conversation status |
386
- | `messages.editInboxMessage()` | Edit a message (Telegram only) |
387
- | `messages.sendInboxMessage()` | Send a message |
386
+ | `messages.editInboxMessage()` | Edit message |
387
+ | `messages.sendInboxMessage()` | Send message |
388
388
 
389
389
  ### Reviews (Inbox)
390
390
  | Method | Description |
391
391
  |--------|-------------|
392
- | `reviews.listInboxReviews()` | List reviews across all accounts |
393
- | `reviews.deleteInboxReviewReply()` | Delete a review reply |
394
- | `reviews.replyToInboxReview()` | Reply to a review |
392
+ | `reviews.listInboxReviews()` | List reviews |
393
+ | `reviews.deleteInboxReviewReply()` | Delete review reply |
394
+ | `reviews.replyToInboxReview()` | Reply to review |
395
395
 
396
396
  ### Invites
397
397
  | Method | Description |
398
398
  |--------|-------------|
399
- | `invites.createInviteToken()` | Create a team member invite token |
399
+ | `invites.createInviteToken()` | Create invite token |
400
400
 
401
401
  ## Requirements
402
402
 
package/dist/index.d.mts CHANGED
@@ -1021,42 +1021,14 @@ type LinkedInPlatformData = {
1021
1021
  };
1022
1022
  /**
1023
1023
  * Media referenced in posts. URLs must be publicly reachable over HTTPS by the destination platforms.
1024
- * When using thirdparty storage, ensure signed links remain valid until upload completes.
1024
+ * When using third-party storage, ensure signed links remain valid until upload completes.
1025
1025
  *
1026
1026
  * **Uploading Media:**
1027
1027
  * Use `POST /v1/media/presign` to get a presigned URL, then upload your file directly to cloud storage.
1028
1028
  * Supports files up to 5GB. See the `/v1/media/presign` endpoint documentation for details.
1029
1029
  *
1030
1030
  * **Automatic Media Compression:**
1031
- * Late automatically compresses media that exceeds platform limits, so you don't need to worry about file size restrictions. Compression happens server-side during publishing.
1032
- *
1033
- * **Image compression by platform:**
1034
- * - Twitter/X: >5 MB
1035
- * - Instagram: >8 MB
1036
- * - Threads: >8 MB
1037
- * - Facebook: >10 MB
1038
- * - LinkedIn: >8 MB
1039
- * - TikTok: >20 MB
1040
- * - Pinterest: >32 MB
1041
- * - Reddit: >20 MB
1042
- * - Snapchat: >20 MB
1043
- * - Telegram: >10 MB
1044
- * - Bluesky: >1 MB
1045
- * - YouTube (thumbnails): >2 MB
1046
- * - Google Business: >5 MB
1047
- *
1048
- * **Video compression by platform:**
1049
- * - Twitter/X: >512 MB
1050
- * - Instagram Stories: >100 MB
1051
- * - Instagram Reels: >300 MB
1052
- * - Facebook: >4 GB
1053
- * - LinkedIn: >5 GB
1054
- * - TikTok: >4 GB
1055
- * - Pinterest: >2 GB
1056
- * - Snapchat: >500 MB
1057
- * - Telegram: >50 MB
1058
- *
1059
- * Note: Videos larger than 200 MB may not be compressed due to server timeout constraints. For best results, compress very large videos before uploading.
1031
+ * Late automatically compresses images and videos that exceed platform limits. Compression happens server-side during publishing. Videos larger than 200 MB may not be compressed due to server timeout constraints.
1060
1032
  *
1061
1033
  */
1062
1034
  type MediaItem = {
@@ -1591,27 +1563,11 @@ type RedditPlatformData = {
1591
1563
  flairId?: string;
1592
1564
  };
1593
1565
  /**
1594
- * Snapchat Public Profile API constraints:
1595
- *
1596
- * **General Requirements:**
1597
- * - Snapchat requires a Public Profile to publish content
1598
- * - Media is required for all content types (no text-only posts)
1599
- * - Only one media item per post is supported
1600
- * - Media is automatically encrypted using AES-256-CBC before upload
1566
+ * Snapchat requires a Public Profile. Media is required for all content types (single item only, auto-encrypted before upload).
1601
1567
  *
1602
- * **Content Types:**
1603
- * - **Story** (default): Ephemeral content visible for 24 hours. No caption/text supported.
1604
- * - **Saved Story**: Permanent story on your Public Profile. Uses post content as title (max 45 chars).
1605
- * - **Spotlight**: Video content for Snapchat's entertainment feed. Supports description (max 160 chars) with hashtags.
1568
+ * **Content types:** Story (ephemeral 24h, no caption), Saved Story (permanent, title max 45 chars), Spotlight (video, description max 160 chars).
1606
1569
  *
1607
- * **Media Constraints:**
1608
- * - Images: max 20 MB, JPEG/PNG format
1609
- * - Videos: max 500 MB, MP4 format, 5-60 seconds duration, minimum 540x960px resolution
1610
- * - Aspect ratio: 9:16 recommended
1611
- *
1612
- * **Analytics:**
1613
- * - Views, screenshots, shares, unique viewers, completion rate available
1614
- * - Analytics are fetched per content type (story/saved_story/spotlight)
1570
+ * **Media limits:** Images max 20 MB (JPEG/PNG), videos max 500 MB (MP4, 5-60s, min 540x960px, 9:16 recommended).
1615
1571
  *
1616
1572
  */
1617
1573
  type SnapchatPlatformData = {
@@ -3311,35 +3267,11 @@ type GetConnectUrlData = {
3311
3267
  */
3312
3268
  profileId: string;
3313
3269
  /**
3314
- * Optional: Your custom redirect URL after connection completes.
3315
- *
3316
- * **Standard Mode:** Omit `headless=true` to use our hosted page selection UI.
3317
- * After the user selects a Facebook Page, Late redirects here with:
3318
- * `?connected=facebook&profileId=X&username=Y`
3270
+ * Your custom redirect URL after connection completes.
3319
3271
  *
3320
- * **Headless Mode (Facebook, LinkedIn, Pinterest, Google Business Profile & Snapchat):**
3321
- * Pass `headless=true` as a query parameter on this endpoint (not inside `redirect_url`), e.g.:
3322
- * `GET /v1/connect/facebook?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3323
- * `GET /v1/connect/linkedin?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3324
- * `GET /v1/connect/pinterest?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3325
- * `GET /v1/connect/googlebusiness?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3326
- * `GET /v1/connect/snapchat?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3272
+ * **Standard Mode:** After the user selects an account, Late redirects here with `?connected={platform}&profileId=X&username=Y`.
3327
3273
  *
3328
- * After OAuth, the user is redirected directly to your `redirect_url` with OAuth data:
3329
- * - **Facebook:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=facebook&step=select_page`
3330
- * - **LinkedIn:** `?profileId=X&pendingDataToken=TOKEN&connect_token=CT&platform=linkedin&step=select_organization`
3331
- * Use `GET /v1/connect/pending-data?token=TOKEN` to fetch tempToken, userProfile, organizations, refreshToken.
3332
- * - **Pinterest:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=pinterest&step=select_board`
3333
- * - **Google Business:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=googlebusiness&step=select_location`
3334
- * - **Snapchat:** `?profileId=X&tempToken=Y&userProfile=Z&publicProfiles=PROFILES&connect_token=CT&platform=snapchat&step=select_public_profile`
3335
- * (publicProfiles contains `id`, `display_name`, `username`, `profile_image_url`, `subscriber_count`)
3336
- *
3337
- * Then use the respective endpoints to build your custom UI:
3338
- * - Facebook: `/v1/connect/facebook/select-page` (GET to fetch, POST to save)
3339
- * - LinkedIn: `/v1/connect/linkedin/organizations` (GET to fetch logos), `/v1/connect/linkedin/select-organization` (POST to save)
3340
- * - Pinterest: `/v1/connect/pinterest/select-board` (GET to fetch, POST to save)
3341
- * - Google Business: `/v1/connect/googlebusiness/locations` (GET) and `/v1/connect/googlebusiness/select-location` (POST)
3342
- * - Snapchat: `/v1/connect/snapchat/select-profile` (POST to save selected public profile)
3274
+ * **Headless Mode:** Pass `headless=true` as a query parameter on this endpoint. After OAuth, the user is redirected to your URL with OAuth data (`profileId`, `tempToken`, `userProfile`, `connect_token`, `platform`, `step`). See the main endpoint description for details.
3343
3275
  *
3344
3276
  * Example: `https://yourdomain.com/integrations/callback`
3345
3277
  *
@@ -6032,6 +5964,11 @@ type GetInboxPostCommentsData = {
6032
5964
  path: {
6033
5965
  /**
6034
5966
  * The post identifier. Accepts a Late post ID (MongoDB ObjectId) which is automatically resolved to the platform-specific post ID, or a platform-specific post ID directly (e.g. tweet ID, Facebook Graph ID, YouTube video ID).
5967
+ *
5968
+ * **LinkedIn:** For your own posts, the full URN stored in Late (e.g., `urn:li:share:7429218977714745345`) is used automatically.
5969
+ * For third-party posts, pass either the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the LinkedIn URL (automatically wrapped as `urn:li:activity:`).
5970
+ * Note: LinkedIn post URLs use activity IDs (`linkedin.com/feed/update/urn:li:activity:XXXX`).
5971
+ *
6035
5972
  */
6036
5973
  postId: string;
6037
5974
  };
@@ -6166,6 +6103,9 @@ type ReplyToInboxPostData = {
6166
6103
  path: {
6167
6104
  /**
6168
6105
  * The post identifier. Accepts a Late post ID or a platform-specific post ID.
6106
+ *
6107
+ * **LinkedIn:** For third-party posts, pass the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the URL.
6108
+ *
6169
6109
  */
6170
6110
  postId: string;
6171
6111
  };
@@ -6188,6 +6128,9 @@ type DeleteInboxCommentData = {
6188
6128
  path: {
6189
6129
  /**
6190
6130
  * The post identifier. Accepts a Late post ID or a platform-specific post ID.
6131
+ *
6132
+ * **LinkedIn:** For third-party posts, pass the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the URL.
6133
+ *
6191
6134
  */
6192
6135
  postId: string;
6193
6136
  };
package/dist/index.d.ts CHANGED
@@ -1021,42 +1021,14 @@ type LinkedInPlatformData = {
1021
1021
  };
1022
1022
  /**
1023
1023
  * Media referenced in posts. URLs must be publicly reachable over HTTPS by the destination platforms.
1024
- * When using thirdparty storage, ensure signed links remain valid until upload completes.
1024
+ * When using third-party storage, ensure signed links remain valid until upload completes.
1025
1025
  *
1026
1026
  * **Uploading Media:**
1027
1027
  * Use `POST /v1/media/presign` to get a presigned URL, then upload your file directly to cloud storage.
1028
1028
  * Supports files up to 5GB. See the `/v1/media/presign` endpoint documentation for details.
1029
1029
  *
1030
1030
  * **Automatic Media Compression:**
1031
- * Late automatically compresses media that exceeds platform limits, so you don't need to worry about file size restrictions. Compression happens server-side during publishing.
1032
- *
1033
- * **Image compression by platform:**
1034
- * - Twitter/X: >5 MB
1035
- * - Instagram: >8 MB
1036
- * - Threads: >8 MB
1037
- * - Facebook: >10 MB
1038
- * - LinkedIn: >8 MB
1039
- * - TikTok: >20 MB
1040
- * - Pinterest: >32 MB
1041
- * - Reddit: >20 MB
1042
- * - Snapchat: >20 MB
1043
- * - Telegram: >10 MB
1044
- * - Bluesky: >1 MB
1045
- * - YouTube (thumbnails): >2 MB
1046
- * - Google Business: >5 MB
1047
- *
1048
- * **Video compression by platform:**
1049
- * - Twitter/X: >512 MB
1050
- * - Instagram Stories: >100 MB
1051
- * - Instagram Reels: >300 MB
1052
- * - Facebook: >4 GB
1053
- * - LinkedIn: >5 GB
1054
- * - TikTok: >4 GB
1055
- * - Pinterest: >2 GB
1056
- * - Snapchat: >500 MB
1057
- * - Telegram: >50 MB
1058
- *
1059
- * Note: Videos larger than 200 MB may not be compressed due to server timeout constraints. For best results, compress very large videos before uploading.
1031
+ * Late automatically compresses images and videos that exceed platform limits. Compression happens server-side during publishing. Videos larger than 200 MB may not be compressed due to server timeout constraints.
1060
1032
  *
1061
1033
  */
1062
1034
  type MediaItem = {
@@ -1591,27 +1563,11 @@ type RedditPlatformData = {
1591
1563
  flairId?: string;
1592
1564
  };
1593
1565
  /**
1594
- * Snapchat Public Profile API constraints:
1595
- *
1596
- * **General Requirements:**
1597
- * - Snapchat requires a Public Profile to publish content
1598
- * - Media is required for all content types (no text-only posts)
1599
- * - Only one media item per post is supported
1600
- * - Media is automatically encrypted using AES-256-CBC before upload
1566
+ * Snapchat requires a Public Profile. Media is required for all content types (single item only, auto-encrypted before upload).
1601
1567
  *
1602
- * **Content Types:**
1603
- * - **Story** (default): Ephemeral content visible for 24 hours. No caption/text supported.
1604
- * - **Saved Story**: Permanent story on your Public Profile. Uses post content as title (max 45 chars).
1605
- * - **Spotlight**: Video content for Snapchat's entertainment feed. Supports description (max 160 chars) with hashtags.
1568
+ * **Content types:** Story (ephemeral 24h, no caption), Saved Story (permanent, title max 45 chars), Spotlight (video, description max 160 chars).
1606
1569
  *
1607
- * **Media Constraints:**
1608
- * - Images: max 20 MB, JPEG/PNG format
1609
- * - Videos: max 500 MB, MP4 format, 5-60 seconds duration, minimum 540x960px resolution
1610
- * - Aspect ratio: 9:16 recommended
1611
- *
1612
- * **Analytics:**
1613
- * - Views, screenshots, shares, unique viewers, completion rate available
1614
- * - Analytics are fetched per content type (story/saved_story/spotlight)
1570
+ * **Media limits:** Images max 20 MB (JPEG/PNG), videos max 500 MB (MP4, 5-60s, min 540x960px, 9:16 recommended).
1615
1571
  *
1616
1572
  */
1617
1573
  type SnapchatPlatformData = {
@@ -3311,35 +3267,11 @@ type GetConnectUrlData = {
3311
3267
  */
3312
3268
  profileId: string;
3313
3269
  /**
3314
- * Optional: Your custom redirect URL after connection completes.
3315
- *
3316
- * **Standard Mode:** Omit `headless=true` to use our hosted page selection UI.
3317
- * After the user selects a Facebook Page, Late redirects here with:
3318
- * `?connected=facebook&profileId=X&username=Y`
3270
+ * Your custom redirect URL after connection completes.
3319
3271
  *
3320
- * **Headless Mode (Facebook, LinkedIn, Pinterest, Google Business Profile & Snapchat):**
3321
- * Pass `headless=true` as a query parameter on this endpoint (not inside `redirect_url`), e.g.:
3322
- * `GET /v1/connect/facebook?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3323
- * `GET /v1/connect/linkedin?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3324
- * `GET /v1/connect/pinterest?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3325
- * `GET /v1/connect/googlebusiness?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3326
- * `GET /v1/connect/snapchat?profileId=PROFILE_ID&redirect_url=https://yourapp.com/callback&headless=true`
3272
+ * **Standard Mode:** After the user selects an account, Late redirects here with `?connected={platform}&profileId=X&username=Y`.
3327
3273
  *
3328
- * After OAuth, the user is redirected directly to your `redirect_url` with OAuth data:
3329
- * - **Facebook:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=facebook&step=select_page`
3330
- * - **LinkedIn:** `?profileId=X&pendingDataToken=TOKEN&connect_token=CT&platform=linkedin&step=select_organization`
3331
- * Use `GET /v1/connect/pending-data?token=TOKEN` to fetch tempToken, userProfile, organizations, refreshToken.
3332
- * - **Pinterest:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=pinterest&step=select_board`
3333
- * - **Google Business:** `?profileId=X&tempToken=Y&userProfile=Z&connect_token=CT&platform=googlebusiness&step=select_location`
3334
- * - **Snapchat:** `?profileId=X&tempToken=Y&userProfile=Z&publicProfiles=PROFILES&connect_token=CT&platform=snapchat&step=select_public_profile`
3335
- * (publicProfiles contains `id`, `display_name`, `username`, `profile_image_url`, `subscriber_count`)
3336
- *
3337
- * Then use the respective endpoints to build your custom UI:
3338
- * - Facebook: `/v1/connect/facebook/select-page` (GET to fetch, POST to save)
3339
- * - LinkedIn: `/v1/connect/linkedin/organizations` (GET to fetch logos), `/v1/connect/linkedin/select-organization` (POST to save)
3340
- * - Pinterest: `/v1/connect/pinterest/select-board` (GET to fetch, POST to save)
3341
- * - Google Business: `/v1/connect/googlebusiness/locations` (GET) and `/v1/connect/googlebusiness/select-location` (POST)
3342
- * - Snapchat: `/v1/connect/snapchat/select-profile` (POST to save selected public profile)
3274
+ * **Headless Mode:** Pass `headless=true` as a query parameter on this endpoint. After OAuth, the user is redirected to your URL with OAuth data (`profileId`, `tempToken`, `userProfile`, `connect_token`, `platform`, `step`). See the main endpoint description for details.
3343
3275
  *
3344
3276
  * Example: `https://yourdomain.com/integrations/callback`
3345
3277
  *
@@ -6032,6 +5964,11 @@ type GetInboxPostCommentsData = {
6032
5964
  path: {
6033
5965
  /**
6034
5966
  * The post identifier. Accepts a Late post ID (MongoDB ObjectId) which is automatically resolved to the platform-specific post ID, or a platform-specific post ID directly (e.g. tweet ID, Facebook Graph ID, YouTube video ID).
5967
+ *
5968
+ * **LinkedIn:** For your own posts, the full URN stored in Late (e.g., `urn:li:share:7429218977714745345`) is used automatically.
5969
+ * For third-party posts, pass either the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the LinkedIn URL (automatically wrapped as `urn:li:activity:`).
5970
+ * Note: LinkedIn post URLs use activity IDs (`linkedin.com/feed/update/urn:li:activity:XXXX`).
5971
+ *
6035
5972
  */
6036
5973
  postId: string;
6037
5974
  };
@@ -6166,6 +6103,9 @@ type ReplyToInboxPostData = {
6166
6103
  path: {
6167
6104
  /**
6168
6105
  * The post identifier. Accepts a Late post ID or a platform-specific post ID.
6106
+ *
6107
+ * **LinkedIn:** For third-party posts, pass the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the URL.
6108
+ *
6169
6109
  */
6170
6110
  postId: string;
6171
6111
  };
@@ -6188,6 +6128,9 @@ type DeleteInboxCommentData = {
6188
6128
  path: {
6189
6129
  /**
6190
6130
  * The post identifier. Accepts a Late post ID or a platform-specific post ID.
6131
+ *
6132
+ * **LinkedIn:** For third-party posts, pass the full activity URN (e.g., `urn:li:activity:7422459067685855232`) or the raw numeric activity ID from the URL.
6133
+ *
6191
6134
  */
6192
6135
  postId: string;
6193
6136
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getlatedev/node",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "The official Node.js library for the Late API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",