@getlatedev/node 0.1.24 → 0.1.26
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 +14 -16
- package/dist/index.d.mts +73 -545
- package/dist/index.d.ts +73 -545
- package/dist/index.js +0 -14
- package/dist/index.mjs +0 -14
- package/package.json +1 -1
- package/src/client.ts +0 -4
- package/src/generated/sdk.gen.ts +128 -534
- package/src/generated/types.gen.ts +72 -550
|
@@ -94,12 +94,7 @@ export type ApiKey = {
|
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
|
-
* Bluesky post settings
|
|
98
|
-
* - Supports text posts with up to 4 images per post
|
|
99
|
-
* - Videos supported (single video per post)
|
|
100
|
-
* - threadItems creates a reply chain (Bluesky thread)
|
|
101
|
-
* - Images exceeding Bluesky's 1MB limit are automatically compressed
|
|
102
|
-
* - Alt text for images is supported via mediaItem properties
|
|
97
|
+
* Bluesky post settings. Supports text posts with up to 4 images or a single video. threadItems creates a reply chain (Bluesky thread). Images exceeding 1MB are automatically compressed. Alt text supported via mediaItem properties.
|
|
103
98
|
*
|
|
104
99
|
*/
|
|
105
100
|
export type BlueskyPlatformData = {
|
|
@@ -132,13 +127,7 @@ export type ConnectionLog = {
|
|
|
132
127
|
accountId?: string;
|
|
133
128
|
platform?: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat';
|
|
134
129
|
/**
|
|
135
|
-
* Type of connection event:
|
|
136
|
-
* - `connect_success` - New account connected successfully
|
|
137
|
-
* - `connect_failed` - Connection attempt failed
|
|
138
|
-
* - `disconnect` - Account was disconnected
|
|
139
|
-
* - `reconnect_success` - Existing account reconnected successfully
|
|
140
|
-
* - `reconnect_failed` - Reconnection attempt failed
|
|
141
|
-
*
|
|
130
|
+
* Type of connection event: connect_success, connect_failed, disconnect, reconnect_success, reconnect_failed
|
|
142
131
|
*/
|
|
143
132
|
eventType?: 'connect_success' | 'connect_failed' | 'disconnect' | 'reconnect_success' | 'reconnect_failed';
|
|
144
133
|
/**
|
|
@@ -209,13 +198,7 @@ export type ConnectionLog = {
|
|
|
209
198
|
export type platform = 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat';
|
|
210
199
|
|
|
211
200
|
/**
|
|
212
|
-
* Type of connection event:
|
|
213
|
-
* - `connect_success` - New account connected successfully
|
|
214
|
-
* - `connect_failed` - Connection attempt failed
|
|
215
|
-
* - `disconnect` - Account was disconnected
|
|
216
|
-
* - `reconnect_success` - Existing account reconnected successfully
|
|
217
|
-
* - `reconnect_failed` - Reconnection attempt failed
|
|
218
|
-
*
|
|
201
|
+
* Type of connection event: connect_success, connect_failed, disconnect, reconnect_success, reconnect_failed
|
|
219
202
|
*/
|
|
220
203
|
export type eventType = 'connect_success' | 'connect_failed' | 'disconnect' | 'reconnect_success' | 'reconnect_failed';
|
|
221
204
|
|
|
@@ -248,14 +231,7 @@ export type ErrorResponse = {
|
|
|
248
231
|
};
|
|
249
232
|
|
|
250
233
|
/**
|
|
251
|
-
*
|
|
252
|
-
* - Posts cannot mix videos and images.
|
|
253
|
-
* - Multiple images supported via attached_media (up to 10 images for feed posts).
|
|
254
|
-
* - Multiple videos in the same post are not supported.
|
|
255
|
-
* - Stories require media (single image or video); text captions are not displayed with stories.
|
|
256
|
-
* - Stories are ephemeral (disappear after 24 hours).
|
|
257
|
-
* - Use pageId to post to multiple pages from the same account connection.
|
|
258
|
-
*
|
|
234
|
+
* Up to 10 images for feed posts, cannot mix videos and images. Stories require single image or video (ephemeral 24h, no captions). Use pageId for multi-page posting.
|
|
259
235
|
*/
|
|
260
236
|
export type FacebookPlatformData = {
|
|
261
237
|
/**
|
|
@@ -267,10 +243,7 @@ export type FacebookPlatformData = {
|
|
|
267
243
|
*/
|
|
268
244
|
firstComment?: string;
|
|
269
245
|
/**
|
|
270
|
-
* Target Facebook Page ID for multi-page posting.
|
|
271
|
-
* If omitted, uses the selected/default page on the connection.
|
|
272
|
-
* Use GET /api/v1/accounts/{id}/facebook-page to list available pages.
|
|
273
|
-
*
|
|
246
|
+
* Target Facebook Page ID for multi-page posting. If omitted, uses the default page. Use GET /v1/accounts/{id}/facebook-page to list pages.
|
|
274
247
|
*/
|
|
275
248
|
pageId?: string;
|
|
276
249
|
};
|
|
@@ -365,30 +338,15 @@ export type FoodMenuSection = {
|
|
|
365
338
|
};
|
|
366
339
|
|
|
367
340
|
/**
|
|
368
|
-
* Google
|
|
369
|
-
* - Posts support text content and a single image (no videos)
|
|
370
|
-
* - Images must be publicly accessible URLs
|
|
371
|
-
* - Call-to-action buttons drive user engagement
|
|
372
|
-
* - Posts appear on your Google Business Profile and in Google Search/Maps
|
|
373
|
-
* - Use locationId to post to multiple locations from the same account connection
|
|
374
|
-
* - Language is auto-detected from content; override with languageCode if needed
|
|
375
|
-
*
|
|
341
|
+
* Text and single image only (no videos). Optional call-to-action button. Posts appear on GBP, Google Search, and Maps. Use locationId for multi-location posting.
|
|
376
342
|
*/
|
|
377
343
|
export type GoogleBusinessPlatformData = {
|
|
378
344
|
/**
|
|
379
|
-
* Target
|
|
380
|
-
* Format: "locations/123456789"
|
|
381
|
-
* If omitted, uses the selected/default location on the connection.
|
|
382
|
-
* Use GET /api/v1/accounts/{id}/gmb-locations to list available locations.
|
|
383
|
-
*
|
|
345
|
+
* Target GBP location ID (e.g. "locations/123456789"). If omitted, uses the default location. Use GET /v1/accounts/{id}/gmb-locations to list locations.
|
|
384
346
|
*/
|
|
385
347
|
locationId?: string;
|
|
386
348
|
/**
|
|
387
|
-
* BCP 47 language code
|
|
388
|
-
* If omitted, the language is automatically detected from the post text.
|
|
389
|
-
* Setting this explicitly is recommended when auto-detection may not be accurate
|
|
390
|
-
* (e.g., very short posts, mixed-language content, or transliterated text).
|
|
391
|
-
*
|
|
349
|
+
* BCP 47 language code (e.g. "en", "de", "es"). Auto-detected if omitted. Set explicitly for short or mixed-language posts.
|
|
392
350
|
*/
|
|
393
351
|
languageCode?: string;
|
|
394
352
|
/**
|
|
@@ -396,14 +354,7 @@ export type GoogleBusinessPlatformData = {
|
|
|
396
354
|
*/
|
|
397
355
|
callToAction?: {
|
|
398
356
|
/**
|
|
399
|
-
* Button action type:
|
|
400
|
-
* - LEARN_MORE: Link to more information
|
|
401
|
-
* - BOOK: Booking/reservation link
|
|
402
|
-
* - ORDER: Online ordering link
|
|
403
|
-
* - SHOP: E-commerce/shopping link
|
|
404
|
-
* - SIGN_UP: Registration/signup link
|
|
405
|
-
* - CALL: Phone call action
|
|
406
|
-
*
|
|
357
|
+
* Button action type: LEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL
|
|
407
358
|
*/
|
|
408
359
|
type: 'LEARN_MORE' | 'BOOK' | 'ORDER' | 'SHOP' | 'SIGN_UP' | 'CALL';
|
|
409
360
|
/**
|
|
@@ -414,14 +365,7 @@ export type GoogleBusinessPlatformData = {
|
|
|
414
365
|
};
|
|
415
366
|
|
|
416
367
|
/**
|
|
417
|
-
* Button action type:
|
|
418
|
-
* - LEARN_MORE: Link to more information
|
|
419
|
-
* - BOOK: Booking/reservation link
|
|
420
|
-
* - ORDER: Online ordering link
|
|
421
|
-
* - SHOP: E-commerce/shopping link
|
|
422
|
-
* - SIGN_UP: Registration/signup link
|
|
423
|
-
* - CALL: Phone call action
|
|
424
|
-
*
|
|
368
|
+
* Button action type: LEARN_MORE, BOOK, ORDER, SHOP, SIGN_UP, CALL
|
|
425
369
|
*/
|
|
426
370
|
export type type = 'LEARN_MORE' | 'BOOK' | 'ORDER' | 'SHOP' | 'SIGN_UP' | 'CALL';
|
|
427
371
|
|
|
@@ -438,21 +382,7 @@ export type HashtagInfo = {
|
|
|
438
382
|
export type status = 'safe' | 'banned' | 'restricted' | 'unknown';
|
|
439
383
|
|
|
440
384
|
/**
|
|
441
|
-
*
|
|
442
|
-
* - Feed posts require images with aspect ratio between 0.8 (4:5 portrait) and 1.91 (1.91:1 landscape).
|
|
443
|
-
* - Images outside this range (e.g., 9:16 Stories/TikTok format) must use contentType 'story'.
|
|
444
|
-
* - Validation happens at post creation; invalid images are rejected immediately with helpful error messages.
|
|
445
|
-
* - Carousels support up to 10 media items.
|
|
446
|
-
* - Stories require media; no captions are published with Stories.
|
|
447
|
-
* - User tags: coordinates range from 0.0 to 1.0 representing position from top-left corner. For carousels, use `mediaIndex` to tag specific slides. Tagged users receive notifications.
|
|
448
|
-
*
|
|
449
|
-
* **Automatic Compression (similar to Bluesky):**
|
|
450
|
-
* - All images (story, post, carousel, thumbnails) exceeding 8 MB are automatically compressed using quality reduction and resizing.
|
|
451
|
-
* - Story videos exceeding 100 MB are automatically compressed.
|
|
452
|
-
* - Reel videos exceeding 300 MB are automatically compressed.
|
|
453
|
-
* - Compression uses Sharp (images) and FFmpeg (videos) to maintain quality while meeting size limits.
|
|
454
|
-
* - Original files are preserved; compressed versions are uploaded to blob storage automatically.
|
|
455
|
-
*
|
|
385
|
+
* Feed aspect ratio 0.8-1.91, carousels up to 10 items, stories require media (no captions). User tag coordinates 0.0-1.0 from top-left. Images over 8 MB and videos over platform limits are auto-compressed.
|
|
456
386
|
*/
|
|
457
387
|
export type InstagramPlatformData = {
|
|
458
388
|
/**
|
|
@@ -472,27 +402,16 @@ export type InstagramPlatformData = {
|
|
|
472
402
|
*/
|
|
473
403
|
firstComment?: string;
|
|
474
404
|
/**
|
|
475
|
-
* Trial Reels configuration. Trial reels are
|
|
476
|
-
* They can later be "graduated" (converted to regular reels visible to followers)
|
|
477
|
-
* either manually in the Instagram app or automatically based on performance.
|
|
478
|
-
* Only applies to Reels (video posts).
|
|
479
|
-
*
|
|
405
|
+
* Trial Reels configuration. Trial reels are shared to non-followers first and can later be graduated to regular reels manually or automatically based on performance. Only applies to Reels.
|
|
480
406
|
*/
|
|
481
407
|
trialParams?: {
|
|
482
408
|
/**
|
|
483
|
-
*
|
|
484
|
-
* - MANUAL: The trial reel can only be manually graduated from the native Instagram app.
|
|
485
|
-
* - SS_PERFORMANCE: The trial reel will be automatically graduated if it performs well with non-followers.
|
|
486
|
-
*
|
|
409
|
+
* MANUAL (graduate from Instagram app) or SS_PERFORMANCE (auto-graduate if performs well with non-followers)
|
|
487
410
|
*/
|
|
488
411
|
graduationStrategy?: 'MANUAL' | 'SS_PERFORMANCE';
|
|
489
412
|
};
|
|
490
413
|
/**
|
|
491
|
-
* Tag Instagram users in photos by username and position
|
|
492
|
-
* For carousel posts, use the optional `mediaIndex` field to specify which slide each tag applies to.
|
|
493
|
-
* Tags without `mediaIndex` default to the first image (index 0) for backwards compatibility.
|
|
494
|
-
* Tags targeting video items are silently skipped (Instagram only supports tagging on images).
|
|
495
|
-
*
|
|
414
|
+
* Tag Instagram users in photos by username and position. Not supported for stories or videos. For carousels, use mediaIndex to target specific slides (defaults to 0). Tags on video items are silently skipped.
|
|
496
415
|
*/
|
|
497
416
|
userTags?: Array<{
|
|
498
417
|
/**
|
|
@@ -508,34 +427,22 @@ export type InstagramPlatformData = {
|
|
|
508
427
|
*/
|
|
509
428
|
y: number;
|
|
510
429
|
/**
|
|
511
|
-
* Zero-based index of the carousel item to tag. Defaults to 0
|
|
512
|
-
* Only relevant for carousel posts. Tags targeting video items or out-of-range indices are ignored.
|
|
513
|
-
*
|
|
430
|
+
* Zero-based index of the carousel item to tag. Defaults to 0. Tags on video items or out-of-range indices are ignored.
|
|
514
431
|
*/
|
|
515
432
|
mediaIndex?: number;
|
|
516
433
|
}>;
|
|
517
434
|
/**
|
|
518
|
-
* Custom name for
|
|
519
|
-
* Only applies to Reels (video posts). Can only be set once - either during creation or
|
|
520
|
-
* later from the Instagram audio page in the app.
|
|
521
|
-
*
|
|
435
|
+
* Custom name for original audio in Reels. Replaces the default "Original Audio" label. Can only be set once.
|
|
522
436
|
*/
|
|
523
437
|
audioName?: string;
|
|
524
438
|
/**
|
|
525
|
-
* Millisecond offset from
|
|
526
|
-
* Only applies to Reels (video posts). If a custom thumbnail URL (instagramThumbnail
|
|
527
|
-
* in mediaItems) is provided, it takes priority and this offset is ignored.
|
|
528
|
-
* Defaults to 0 (first frame).
|
|
529
|
-
*
|
|
439
|
+
* Millisecond offset from video start for the Reel thumbnail. Ignored if a custom thumbnail URL is provided. Defaults to 0.
|
|
530
440
|
*/
|
|
531
441
|
thumbOffset?: number;
|
|
532
442
|
};
|
|
533
443
|
|
|
534
444
|
/**
|
|
535
|
-
*
|
|
536
|
-
* - MANUAL: The trial reel can only be manually graduated from the native Instagram app.
|
|
537
|
-
* - SS_PERFORMANCE: The trial reel will be automatically graduated if it performs well with non-followers.
|
|
538
|
-
*
|
|
445
|
+
* MANUAL (graduate from Instagram app) or SS_PERFORMANCE (auto-graduate if performs well with non-followers)
|
|
539
446
|
*/
|
|
540
447
|
export type graduationStrategy = 'MANUAL' | 'SS_PERFORMANCE';
|
|
541
448
|
|
|
@@ -553,9 +460,7 @@ export type LinkedInAggregateAnalyticsDailyResponse = {
|
|
|
553
460
|
endDate?: string;
|
|
554
461
|
} | null;
|
|
555
462
|
/**
|
|
556
|
-
* Daily breakdown of each metric
|
|
557
|
-
* Note: 'reach' (MEMBERS_REACHED) is not available with DAILY aggregation per LinkedIn API limitations.
|
|
558
|
-
*
|
|
463
|
+
* Daily breakdown of each metric as date/count pairs. Reach not available with DAILY aggregation.
|
|
559
464
|
*/
|
|
560
465
|
analytics?: {
|
|
561
466
|
impressions?: Array<{
|
|
@@ -631,22 +536,11 @@ export type LinkedInAggregateAnalyticsTotalResponse = {
|
|
|
631
536
|
export type aggregation3 = 'TOTAL';
|
|
632
537
|
|
|
633
538
|
/**
|
|
634
|
-
*
|
|
635
|
-
* - Multi-image posts support up to 20 images.
|
|
636
|
-
* - Multi-video posts are not supported.
|
|
637
|
-
* - Single PDF document posts are supported (max 100MB, ~300 pages). Documents cannot be mixed with other media.
|
|
638
|
-
* - Post ID is returned in the x-restli-id response header.
|
|
639
|
-
* - Link previews are automatically generated for URLs when no media is attached (can be disabled with disableLinkPreview).
|
|
640
|
-
* - Use organizationUrn to post to multiple organizations from the same account connection.
|
|
641
|
-
*
|
|
539
|
+
* Up to 20 images, no multi-video. Single PDF supported (max 100MB). Link previews auto-generated when no media attached. Use organizationUrn for multi-org posting.
|
|
642
540
|
*/
|
|
643
541
|
export type LinkedInPlatformData = {
|
|
644
542
|
/**
|
|
645
|
-
* Target LinkedIn Organization URN
|
|
646
|
-
* Format: "urn:li:organization:123456789"
|
|
647
|
-
* If omitted, uses the selected/default organization on the connection.
|
|
648
|
-
* Use GET /api/v1/accounts/{id}/linkedin-organizations to list available organizations.
|
|
649
|
-
*
|
|
543
|
+
* Target LinkedIn Organization URN (e.g. "urn:li:organization:123456789"). If omitted, uses the default org. Use GET /v1/accounts/{id}/linkedin-organizations to list orgs.
|
|
650
544
|
*/
|
|
651
545
|
organizationUrn?: string;
|
|
652
546
|
/**
|
|
@@ -660,16 +554,7 @@ export type LinkedInPlatformData = {
|
|
|
660
554
|
};
|
|
661
555
|
|
|
662
556
|
/**
|
|
663
|
-
* Media referenced in posts. URLs must be publicly reachable over HTTPS
|
|
664
|
-
* When using third-party storage, ensure signed links remain valid until upload completes.
|
|
665
|
-
*
|
|
666
|
-
* **Uploading Media:**
|
|
667
|
-
* Use `POST /v1/media/presign` to get a presigned URL, then upload your file directly to cloud storage.
|
|
668
|
-
* Supports files up to 5GB. See the `/v1/media/presign` endpoint documentation for details.
|
|
669
|
-
*
|
|
670
|
-
* **Automatic Media Compression:**
|
|
671
|
-
* 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.
|
|
672
|
-
*
|
|
557
|
+
* Media referenced in posts. URLs must be publicly reachable over HTTPS. Use POST /v1/media/presign for uploads up to 5GB. Late auto-compresses images and videos that exceed platform limits (videos over 200 MB may not be compressed).
|
|
673
558
|
*/
|
|
674
559
|
export type MediaItem = {
|
|
675
560
|
type?: 'image' | 'video' | 'gif' | 'document';
|
|
@@ -805,11 +690,7 @@ export type PlatformTarget = {
|
|
|
805
690
|
*/
|
|
806
691
|
platformPostId?: string;
|
|
807
692
|
/**
|
|
808
|
-
* Public URL of the published post
|
|
809
|
-
* Populated after successful publish. For immediate posts (publishNow=true),
|
|
810
|
-
* this is included in the response. For scheduled posts, fetch the post
|
|
811
|
-
* via GET /v1/posts/{postId} after the scheduled time.
|
|
812
|
-
*
|
|
693
|
+
* Public URL of the published post. Included in the response for immediate posts; for scheduled posts, fetch via GET /v1/posts/{postId} after publish time.
|
|
813
694
|
*/
|
|
814
695
|
platformPostUrl?: string;
|
|
815
696
|
/**
|
|
@@ -817,59 +698,26 @@ export type PlatformTarget = {
|
|
|
817
698
|
*/
|
|
818
699
|
publishedAt?: string;
|
|
819
700
|
/**
|
|
820
|
-
* Human-readable error message when status is
|
|
821
|
-
* Contains platform-specific error details explaining why the publish failed.
|
|
822
|
-
* Examples:
|
|
823
|
-
* - "Instagram access token has expired. Please reconnect your account."
|
|
824
|
-
* - "Post text exceeds the 500 character limit for Threads."
|
|
825
|
-
* - "You do not have enough karma to post in this subreddit."
|
|
826
|
-
* - "Video is too long for Reels. Facebook Reels must be 90 seconds or less."
|
|
827
|
-
*
|
|
701
|
+
* Human-readable error message when status is failed. Contains platform-specific error details explaining why the publish failed.
|
|
828
702
|
*/
|
|
829
703
|
errorMessage?: string;
|
|
830
704
|
/**
|
|
831
|
-
* Error category for programmatic handling:
|
|
832
|
-
* - auth_expired: Token expired or revoked, account needs reconnection
|
|
833
|
-
* - user_content: Content doesn't meet platform requirements (too long, wrong format, etc.)
|
|
834
|
-
* - user_abuse: Rate limits, spam detection, excessive posting
|
|
835
|
-
* - account_issue: Account configuration problems (missing board, inactive account)
|
|
836
|
-
* - platform_rejected: Platform rules violated (banned, suspended, policy violation)
|
|
837
|
-
* - platform_error: Platform-side issues (5xx errors, maintenance)
|
|
838
|
-
* - system_error: Late infrastructure issues (timeouts, network errors)
|
|
839
|
-
* - unknown: Unclassified error
|
|
840
|
-
*
|
|
705
|
+
* Error category for programmatic handling: auth_expired (token expired/revoked), user_content (wrong format/too long), user_abuse (rate limits/spam), account_issue (config problems), platform_rejected (policy violation), platform_error (5xx/maintenance), system_error (Late infra), unknown
|
|
841
706
|
*/
|
|
842
707
|
errorCategory?: 'auth_expired' | 'user_content' | 'user_abuse' | 'account_issue' | 'platform_rejected' | 'platform_error' | 'system_error' | 'unknown';
|
|
843
708
|
/**
|
|
844
|
-
* Who
|
|
845
|
-
* - user: User action required (fix content, reconnect account)
|
|
846
|
-
* - platform: Platform-side issue (outage, API change)
|
|
847
|
-
* - system: Late system issue (rare)
|
|
848
|
-
*
|
|
709
|
+
* Who caused the error: user (fix content/reconnect), platform (outage/API change), system (Late issue, rare)
|
|
849
710
|
*/
|
|
850
711
|
errorSource?: 'user' | 'platform' | 'system';
|
|
851
712
|
};
|
|
852
713
|
|
|
853
714
|
/**
|
|
854
|
-
* Error category for programmatic handling:
|
|
855
|
-
* - auth_expired: Token expired or revoked, account needs reconnection
|
|
856
|
-
* - user_content: Content doesn't meet platform requirements (too long, wrong format, etc.)
|
|
857
|
-
* - user_abuse: Rate limits, spam detection, excessive posting
|
|
858
|
-
* - account_issue: Account configuration problems (missing board, inactive account)
|
|
859
|
-
* - platform_rejected: Platform rules violated (banned, suspended, policy violation)
|
|
860
|
-
* - platform_error: Platform-side issues (5xx errors, maintenance)
|
|
861
|
-
* - system_error: Late infrastructure issues (timeouts, network errors)
|
|
862
|
-
* - unknown: Unclassified error
|
|
863
|
-
*
|
|
715
|
+
* Error category for programmatic handling: auth_expired (token expired/revoked), user_content (wrong format/too long), user_abuse (rate limits/spam), account_issue (config problems), platform_rejected (policy violation), platform_error (5xx/maintenance), system_error (Late infra), unknown
|
|
864
716
|
*/
|
|
865
717
|
export type errorCategory = 'auth_expired' | 'user_content' | 'user_abuse' | 'account_issue' | 'platform_rejected' | 'platform_error' | 'system_error' | 'unknown';
|
|
866
718
|
|
|
867
719
|
/**
|
|
868
|
-
* Who
|
|
869
|
-
* - user: User action required (fix content, reconnect account)
|
|
870
|
-
* - platform: Platform-side issue (outage, API change)
|
|
871
|
-
* - system: Late system issue (rare)
|
|
872
|
-
*
|
|
720
|
+
* Who caused the error: user (fix content/reconnect), platform (outage/API change), system (Late issue, rare)
|
|
873
721
|
*/
|
|
874
722
|
export type errorSource = 'user' | 'platform' | 'system';
|
|
875
723
|
|
|
@@ -888,11 +736,7 @@ export type Post = {
|
|
|
888
736
|
timezone?: string;
|
|
889
737
|
status?: 'draft' | 'scheduled' | 'publishing' | 'published' | 'failed' | 'partial';
|
|
890
738
|
/**
|
|
891
|
-
* YouTube tag
|
|
892
|
-
* - No count cap; duplicates removed.
|
|
893
|
-
* - Each tag must be ≤ 100 chars.
|
|
894
|
-
* - Combined characters across all tags ≤ 500.
|
|
895
|
-
*
|
|
739
|
+
* YouTube constraints: each tag max 100 chars, combined max 500 chars, duplicates removed.
|
|
896
740
|
*/
|
|
897
741
|
tags?: Array<(string)>;
|
|
898
742
|
hashtags?: Array<(string)>;
|
|
@@ -962,14 +806,7 @@ export type PostLog = {
|
|
|
962
806
|
accountId?: string;
|
|
963
807
|
accountUsername?: string;
|
|
964
808
|
/**
|
|
965
|
-
* Type of action logged:
|
|
966
|
-
* - `publish` - Initial publish attempt
|
|
967
|
-
* - `retry` - Retry after failure
|
|
968
|
-
* - `media_upload` - Media upload step
|
|
969
|
-
* - `rate_limit_pause` - Account paused due to rate limits
|
|
970
|
-
* - `token_refresh` - Token was refreshed
|
|
971
|
-
* - `cancelled` - Post was cancelled
|
|
972
|
-
*
|
|
809
|
+
* Type of action logged: publish (initial attempt), retry (after failure), media_upload, rate_limit_pause, token_refresh, cancelled
|
|
973
810
|
*/
|
|
974
811
|
action?: 'publish' | 'retry' | 'media_upload' | 'rate_limit_pause' | 'token_refresh' | 'cancelled';
|
|
975
812
|
status?: 'success' | 'failed' | 'pending' | 'skipped';
|
|
@@ -1032,52 +869,12 @@ export type PostLog = {
|
|
|
1032
869
|
};
|
|
1033
870
|
|
|
1034
871
|
/**
|
|
1035
|
-
* Type of action logged:
|
|
1036
|
-
* - `publish` - Initial publish attempt
|
|
1037
|
-
* - `retry` - Retry after failure
|
|
1038
|
-
* - `media_upload` - Media upload step
|
|
1039
|
-
* - `rate_limit_pause` - Account paused due to rate limits
|
|
1040
|
-
* - `token_refresh` - Token was refreshed
|
|
1041
|
-
* - `cancelled` - Post was cancelled
|
|
1042
|
-
*
|
|
872
|
+
* Type of action logged: publish (initial attempt), retry (after failure), media_upload, rate_limit_pause, token_refresh, cancelled
|
|
1043
873
|
*/
|
|
1044
874
|
export type action = 'publish' | 'retry' | 'media_upload' | 'rate_limit_pause' | 'token_refresh' | 'cancelled';
|
|
1045
875
|
|
|
1046
876
|
export type status3 = 'success' | 'failed' | 'pending' | 'skipped';
|
|
1047
877
|
|
|
1048
|
-
export type PostLogDetail = PostLog & {
|
|
1049
|
-
/**
|
|
1050
|
-
* Populated post with full details
|
|
1051
|
-
*/
|
|
1052
|
-
postId?: {
|
|
1053
|
-
_id?: string;
|
|
1054
|
-
content?: string;
|
|
1055
|
-
status?: string;
|
|
1056
|
-
scheduledFor?: string;
|
|
1057
|
-
platforms?: Array<{
|
|
1058
|
-
[key: string]: unknown;
|
|
1059
|
-
}>;
|
|
1060
|
-
mediaItems?: Array<{
|
|
1061
|
-
[key: string]: unknown;
|
|
1062
|
-
}>;
|
|
1063
|
-
};
|
|
1064
|
-
/**
|
|
1065
|
-
* Populated account reference
|
|
1066
|
-
*/
|
|
1067
|
-
accountId?: {
|
|
1068
|
-
_id?: string;
|
|
1069
|
-
platform?: string;
|
|
1070
|
-
username?: string;
|
|
1071
|
-
displayName?: string;
|
|
1072
|
-
};
|
|
1073
|
-
/**
|
|
1074
|
-
* Additional metadata (e.g., rate limit info)
|
|
1075
|
-
*/
|
|
1076
|
-
metadata?: {
|
|
1077
|
-
[key: string]: unknown;
|
|
1078
|
-
};
|
|
1079
|
-
};
|
|
1080
|
-
|
|
1081
878
|
export type PostRetryResponse = {
|
|
1082
879
|
message?: string;
|
|
1083
880
|
post?: Post;
|
|
@@ -1101,10 +898,7 @@ export type Profile = {
|
|
|
1101
898
|
color?: string;
|
|
1102
899
|
isDefault?: boolean;
|
|
1103
900
|
/**
|
|
1104
|
-
* Only present when
|
|
1105
|
-
* exceeds the user's plan limit. Over-limit profiles cannot be used for posting
|
|
1106
|
-
* but can be managed (disconnected accounts, deleted).
|
|
1107
|
-
*
|
|
901
|
+
* Only present when includeOverLimit=true. Indicates if this profile exceeds the plan limit.
|
|
1108
902
|
*/
|
|
1109
903
|
isOverLimit?: boolean;
|
|
1110
904
|
createdAt?: string;
|
|
@@ -1204,22 +998,11 @@ export type QueueUpdateResponse = {
|
|
|
1204
998
|
};
|
|
1205
999
|
|
|
1206
1000
|
/**
|
|
1207
|
-
*
|
|
1208
|
-
* - Posts are either "link" (with URL/media) or "self" (text-only)
|
|
1209
|
-
* - If media is provided, the first media item's URL is used as the link
|
|
1210
|
-
* - Use forceSelf to override and create a text post with the URL in the body
|
|
1211
|
-
* - Subreddit defaults to the account's configured subreddit if omitted
|
|
1212
|
-
* - Use the same accountId multiple times with different subreddit values in platformSpecificData to post to multiple subreddits
|
|
1213
|
-
* - Images are automatically compressed if they exceed Reddit's 20MB limit
|
|
1214
|
-
* - Some subreddits require a flair; if not provided, the API will attempt to use the first available flair as fallback
|
|
1215
|
-
*
|
|
1001
|
+
* Posts are either link (with URL/media) or self (text-only). Use forceSelf to override. Subreddit defaults to the account's configured one. Some subreddits require a flair.
|
|
1216
1002
|
*/
|
|
1217
1003
|
export type RedditPlatformData = {
|
|
1218
1004
|
/**
|
|
1219
|
-
* Target subreddit name (without "r/" prefix).
|
|
1220
|
-
* Overrides the default subreddit configured on the account connection.
|
|
1221
|
-
* Use GET /api/v1/accounts/{id}/reddit-subreddits to list available subreddits.
|
|
1222
|
-
*
|
|
1005
|
+
* Target subreddit name (without "r/" prefix). Overrides the default. Use GET /v1/accounts/{id}/reddit-subreddits to list options.
|
|
1223
1006
|
*/
|
|
1224
1007
|
subreddit?: string;
|
|
1225
1008
|
/**
|
|
@@ -1235,38 +1018,23 @@ export type RedditPlatformData = {
|
|
|
1235
1018
|
*/
|
|
1236
1019
|
forceSelf?: boolean;
|
|
1237
1020
|
/**
|
|
1238
|
-
* Flair ID for the post. Required by some subreddits.
|
|
1239
|
-
* Use GET /api/v1/accounts/{id}/reddit-flairs?subreddit=name to list available flairs.
|
|
1240
|
-
*
|
|
1021
|
+
* Flair ID for the post. Required by some subreddits. Use GET /v1/accounts/{id}/reddit-flairs?subreddit=name to list flairs.
|
|
1241
1022
|
*/
|
|
1242
1023
|
flairId?: string;
|
|
1243
1024
|
};
|
|
1244
1025
|
|
|
1245
1026
|
/**
|
|
1246
|
-
*
|
|
1247
|
-
*
|
|
1248
|
-
* **Content types:** Story (ephemeral 24h, no caption), Saved Story (permanent, title max 45 chars), Spotlight (video, description max 160 chars).
|
|
1249
|
-
*
|
|
1250
|
-
* **Media limits:** Images max 20 MB (JPEG/PNG), videos max 500 MB (MP4, 5-60s, min 540x960px, 9:16 recommended).
|
|
1251
|
-
*
|
|
1027
|
+
* Requires a Public Profile. Single media item only. Content types: story (ephemeral 24h), saved_story (permanent, title max 45 chars), spotlight (video, max 160 chars).
|
|
1252
1028
|
*/
|
|
1253
1029
|
export type SnapchatPlatformData = {
|
|
1254
1030
|
/**
|
|
1255
|
-
*
|
|
1256
|
-
* - `story` - Ephemeral snap visible for 24 hours (default)
|
|
1257
|
-
* - `saved_story` - Permanent story saved to Public Profile
|
|
1258
|
-
* - `spotlight` - Video posted to Spotlight (Snapchat's TikTok-like feed)
|
|
1259
|
-
*
|
|
1031
|
+
* Content type: story (ephemeral 24h, default), saved_story (permanent on Public Profile), spotlight (video feed)
|
|
1260
1032
|
*/
|
|
1261
1033
|
contentType?: 'story' | 'saved_story' | 'spotlight';
|
|
1262
1034
|
};
|
|
1263
1035
|
|
|
1264
1036
|
/**
|
|
1265
|
-
*
|
|
1266
|
-
* - `story` - Ephemeral snap visible for 24 hours (default)
|
|
1267
|
-
* - `saved_story` - Permanent story saved to Public Profile
|
|
1268
|
-
* - `spotlight` - Video posted to Spotlight (Snapchat's TikTok-like feed)
|
|
1269
|
-
*
|
|
1037
|
+
* Content type: story (ephemeral 24h, default), saved_story (permanent on Public Profile), spotlight (video feed)
|
|
1270
1038
|
*/
|
|
1271
1039
|
export type contentType2 = 'story' | 'saved_story' | 'spotlight';
|
|
1272
1040
|
|
|
@@ -1277,20 +1045,7 @@ export type SocialAccount = {
|
|
|
1277
1045
|
username?: string;
|
|
1278
1046
|
displayName?: string;
|
|
1279
1047
|
/**
|
|
1280
|
-
* Full profile URL for the connected account
|
|
1281
|
-
* - Twitter/X: https://x.com/{username}
|
|
1282
|
-
* - Instagram: https://instagram.com/{username}
|
|
1283
|
-
* - TikTok: https://tiktok.com/@{username}
|
|
1284
|
-
* - YouTube: https://youtube.com/@{handle} or https://youtube.com/channel/{id}
|
|
1285
|
-
* - LinkedIn Personal: https://www.linkedin.com/in/{vanityName}/
|
|
1286
|
-
* - LinkedIn Organization: https://www.linkedin.com/company/{vanityName}/
|
|
1287
|
-
* - Threads: https://threads.net/@{username}
|
|
1288
|
-
* - Pinterest: https://pinterest.com/{username}
|
|
1289
|
-
* - Reddit: https://reddit.com/user/{username}
|
|
1290
|
-
* - Bluesky: https://bsky.app/profile/{handle}
|
|
1291
|
-
* - Facebook: https://facebook.com/{username} or https://facebook.com/{pageId}
|
|
1292
|
-
* - Google Business: Google Maps URL for the business location
|
|
1293
|
-
*
|
|
1048
|
+
* Full profile URL for the connected account on its platform.
|
|
1294
1049
|
*/
|
|
1295
1050
|
profileUrl?: string;
|
|
1296
1051
|
isActive?: boolean;
|
|
@@ -1305,18 +1060,7 @@ export type SocialAccount = {
|
|
|
1305
1060
|
};
|
|
1306
1061
|
|
|
1307
1062
|
/**
|
|
1308
|
-
*
|
|
1309
|
-
* - Supports text, images (up to 10), videos (up to 10), and mixed media albums
|
|
1310
|
-
* - Posts to channels display the channel name and logo as author
|
|
1311
|
-
* - Posts to groups display the bot name (Late) as author
|
|
1312
|
-
* - Message IDs are returned for analytics tracking
|
|
1313
|
-
* - Captions support up to 1024 characters for media posts, 4096 for text-only
|
|
1314
|
-
*
|
|
1315
|
-
* **Analytics:**
|
|
1316
|
-
* - **Not available via API.** The Telegram Bot API does not expose message analytics (views, forwards, reactions).
|
|
1317
|
-
* - View counts are only visible to channel admins directly in the Telegram app.
|
|
1318
|
-
* - This is a Telegram platform limitation that affects all third-party tools.
|
|
1319
|
-
*
|
|
1063
|
+
* Text, images (up to 10), videos (up to 10), and mixed media albums. Captions up to 1024 chars for media, 4096 for text-only.
|
|
1320
1064
|
*/
|
|
1321
1065
|
export type TelegramPlatformData = {
|
|
1322
1066
|
/**
|
|
@@ -1343,13 +1087,7 @@ export type TelegramPlatformData = {
|
|
|
1343
1087
|
export type parseMode = 'HTML' | 'Markdown' | 'MarkdownV2';
|
|
1344
1088
|
|
|
1345
1089
|
/**
|
|
1346
|
-
*
|
|
1347
|
-
* - Carousel posts support up to 10 images (no videos in carousels).
|
|
1348
|
-
* - Single posts support one image or one video.
|
|
1349
|
-
* - Videos must be H.264/AAC MP4 format, max 5 minutes duration.
|
|
1350
|
-
* - Images must be JPEG or PNG, max 8 MB each.
|
|
1351
|
-
* - threadItems creates a reply chain (Threads equivalent of Twitter threads).
|
|
1352
|
-
*
|
|
1090
|
+
* Up to 10 images per carousel (no videos). Videos must be H.264/AAC MP4, max 5 min. Images JPEG/PNG, max 8 MB. Use threadItems for reply chains.
|
|
1353
1091
|
*/
|
|
1354
1092
|
export type ThreadsPlatformData = {
|
|
1355
1093
|
/**
|
|
@@ -1362,25 +1100,11 @@ export type ThreadsPlatformData = {
|
|
|
1362
1100
|
};
|
|
1363
1101
|
|
|
1364
1102
|
/**
|
|
1365
|
-
*
|
|
1366
|
-
*
|
|
1367
|
-
* **Constraints:**
|
|
1368
|
-
* - Photo carousels support up to 35 images.
|
|
1369
|
-
* - **Title length limits**:
|
|
1370
|
-
* - Videos: up to 2200 chars (full content used as title)
|
|
1371
|
-
* - Photos: content is automatically truncated to 90 chars for title (hashtags/URLs stripped). Use 'description' field for longer text (up to 4000 chars).
|
|
1372
|
-
* - privacyLevel must be chosen from creator_info.privacy_level_options (no defaulting).
|
|
1373
|
-
* - allowDuet and allowStitch required for videos; allowComment for all.
|
|
1374
|
-
* - contentPreviewConfirmed and expressConsentGiven must be true before posting.
|
|
1375
|
-
*
|
|
1376
|
-
* **Note:** Both camelCase and snake_case field names are accepted for backwards compatibility.
|
|
1377
|
-
* The nested `tiktokSettings` object format is also still supported but deprecated.
|
|
1378
|
-
*
|
|
1103
|
+
* Photo carousels up to 35 images. Video titles up to 2200 chars, photo titles truncated to 90 chars. privacyLevel must match creator_info options. Both camelCase and snake_case accepted.
|
|
1379
1104
|
*/
|
|
1380
1105
|
export type TikTokPlatformData = {
|
|
1381
1106
|
/**
|
|
1382
|
-
* When true,
|
|
1383
|
-
*
|
|
1107
|
+
* When true, sends the post to the TikTok Creator Inbox as a draft instead of publishing immediately.
|
|
1384
1108
|
*/
|
|
1385
1109
|
draft?: boolean;
|
|
1386
1110
|
/**
|
|
@@ -1440,9 +1164,7 @@ export type TikTokPlatformData = {
|
|
|
1440
1164
|
*/
|
|
1441
1165
|
videoMadeWithAi?: boolean;
|
|
1442
1166
|
/**
|
|
1443
|
-
* Optional long-form description for photo posts (max 4000 chars).
|
|
1444
|
-
* Recommended for photo posts when content exceeds 90 characters, as photo titles are automatically truncated to 90 chars (after stripping hashtags/URLs).
|
|
1445
|
-
*
|
|
1167
|
+
* Optional long-form description for photo posts (max 4000 chars). Recommended when content exceeds 90 chars, as photo titles are auto-truncated.
|
|
1446
1168
|
*/
|
|
1447
1169
|
description?: string;
|
|
1448
1170
|
};
|
|
@@ -1457,30 +1179,6 @@ export type commercialContentType = 'none' | 'brand_organic' | 'brand_content';
|
|
|
1457
1179
|
*/
|
|
1458
1180
|
export type mediaType = 'video' | 'photo';
|
|
1459
1181
|
|
|
1460
|
-
/**
|
|
1461
|
-
* **DEPRECATED**: Use flat properties directly in TikTokPlatformData instead.
|
|
1462
|
-
* This nested format is supported for backwards compatibility only.
|
|
1463
|
-
*
|
|
1464
|
-
* @deprecated
|
|
1465
|
-
*/
|
|
1466
|
-
export type TikTokSettings = {
|
|
1467
|
-
privacyLevel?: string;
|
|
1468
|
-
allowComment?: boolean;
|
|
1469
|
-
allowDuet?: boolean;
|
|
1470
|
-
allowStitch?: boolean;
|
|
1471
|
-
commercialContentType?: string;
|
|
1472
|
-
brandPartnerPromote?: boolean;
|
|
1473
|
-
isBrandOrganicPost?: boolean;
|
|
1474
|
-
contentPreviewConfirmed?: boolean;
|
|
1475
|
-
expressConsentGiven?: boolean;
|
|
1476
|
-
mediaType?: string;
|
|
1477
|
-
videoCoverTimestampMs?: number;
|
|
1478
|
-
photoCoverIndex?: number;
|
|
1479
|
-
autoAddMusic?: boolean;
|
|
1480
|
-
videoMadeWithAi?: boolean;
|
|
1481
|
-
description?: string;
|
|
1482
|
-
};
|
|
1483
|
-
|
|
1484
1182
|
export type TranscriptResponse = {
|
|
1485
1183
|
transcript?: string;
|
|
1486
1184
|
segments?: Array<TranscriptSegment>;
|
|
@@ -1897,16 +1595,7 @@ export type YouTubeDailyViewsResponse = {
|
|
|
1897
1595
|
};
|
|
1898
1596
|
|
|
1899
1597
|
/**
|
|
1900
|
-
*
|
|
1901
|
-
* - Videos ≤ 3 minutes are automatically detected as YouTube Shorts
|
|
1902
|
-
* - Videos > 3 minutes become regular YouTube videos
|
|
1903
|
-
* - Custom thumbnails supported for regular videos (via mediaItem.thumbnail)
|
|
1904
|
-
* - Custom thumbnails NOT supported for Shorts via API
|
|
1905
|
-
* - Scheduled videos are uploaded immediately as the specified visibility and published at scheduled time
|
|
1906
|
-
* - Visibility defaults to "public" if not specified
|
|
1907
|
-
* - madeForKids defaults to false (not child-directed)
|
|
1908
|
-
* - Set containsSyntheticMedia: true if your video contains AI-generated content
|
|
1909
|
-
*
|
|
1598
|
+
* Videos under 3 min auto-detected as Shorts. Custom thumbnails for regular videos only. Scheduled videos are uploaded immediately with the specified visibility.
|
|
1910
1599
|
*/
|
|
1911
1600
|
export type YouTubePlatformData = {
|
|
1912
1601
|
/**
|
|
@@ -1914,24 +1603,11 @@ export type YouTubePlatformData = {
|
|
|
1914
1603
|
*/
|
|
1915
1604
|
title?: string;
|
|
1916
1605
|
/**
|
|
1917
|
-
* Video visibility
|
|
1918
|
-
* - public: Anyone can search for and watch (default)
|
|
1919
|
-
* - unlisted: Only people with the link can watch
|
|
1920
|
-
* - private: Only you and people you specifically share with can watch
|
|
1921
|
-
*
|
|
1606
|
+
* Video visibility: public (default, anyone can watch), unlisted (link only), private (invite only)
|
|
1922
1607
|
*/
|
|
1923
1608
|
visibility?: 'public' | 'private' | 'unlisted';
|
|
1924
1609
|
/**
|
|
1925
|
-
* COPPA compliance
|
|
1926
|
-
* - true: Video is made for kids (child-directed content)
|
|
1927
|
-
* - false: Video is NOT made for kids (default)
|
|
1928
|
-
*
|
|
1929
|
-
* This field maps to YouTube's `selfDeclaredMadeForKids` setting. Videos marked as made for kids
|
|
1930
|
-
* have restricted features (no comments, no notifications, limited ad targeting).
|
|
1931
|
-
*
|
|
1932
|
-
* IMPORTANT: If not specified, defaults to false. YouTube requires this to be explicitly set,
|
|
1933
|
-
* otherwise the video may be blocked from views until configured in YouTube Studio.
|
|
1934
|
-
*
|
|
1610
|
+
* COPPA compliance flag. Set true for child-directed content (restricts comments, notifications, ad targeting). Defaults to false. YouTube may block views if not explicitly set.
|
|
1935
1611
|
*/
|
|
1936
1612
|
madeForKids?: boolean;
|
|
1937
1613
|
/**
|
|
@@ -1939,20 +1615,11 @@ export type YouTubePlatformData = {
|
|
|
1939
1615
|
*/
|
|
1940
1616
|
firstComment?: string;
|
|
1941
1617
|
/**
|
|
1942
|
-
* AI-generated content disclosure
|
|
1943
|
-
* that could be mistaken for real people, places, or events. This helps viewers understand when realistic
|
|
1944
|
-
* content has been created or altered using AI. YouTube may add a label to videos when this is set.
|
|
1945
|
-
* Added to YouTube Data API in October 2024.
|
|
1946
|
-
*
|
|
1618
|
+
* AI-generated content disclosure. Set true if the video contains synthetic content that could be mistaken for real. YouTube may add a label.
|
|
1947
1619
|
*/
|
|
1948
1620
|
containsSyntheticMedia?: boolean;
|
|
1949
1621
|
/**
|
|
1950
|
-
* YouTube video category ID. Defaults to
|
|
1951
|
-
* Common categories: 1 (Film & Animation), 2 (Autos & Vehicles), 10 (Music),
|
|
1952
|
-
* 15 (Pets & Animals), 17 (Sports), 20 (Gaming), 22 (People & Blogs),
|
|
1953
|
-
* 23 (Comedy), 24 (Entertainment), 25 (News & Politics), 26 (Howto & Style),
|
|
1954
|
-
* 27 (Education), 28 (Science & Technology).
|
|
1955
|
-
*
|
|
1622
|
+
* YouTube video category ID. Defaults to 22 (People & Blogs). Common: 1 (Film), 2 (Autos), 10 (Music), 15 (Pets), 17 (Sports), 20 (Gaming), 23 (Comedy), 24 (Entertainment), 25 (News), 26 (Howto), 27 (Education), 28 (Science & Tech).
|
|
1956
1623
|
*/
|
|
1957
1624
|
categoryId?: string;
|
|
1958
1625
|
};
|
|
@@ -2207,10 +1874,7 @@ export type GetAnalyticsData = {
|
|
|
2207
1874
|
*/
|
|
2208
1875
|
platform?: string;
|
|
2209
1876
|
/**
|
|
2210
|
-
* Returns analytics for a single post. Accepts both Late Post IDs
|
|
2211
|
-
* and External Post IDs (from this endpoint's list response). The API automatically
|
|
2212
|
-
* resolves Late Post IDs to their corresponding External Post analytics.
|
|
2213
|
-
*
|
|
1877
|
+
* Returns analytics for a single post. Accepts both Late Post IDs and External Post IDs. Late IDs are auto-resolved to External Post analytics.
|
|
2214
1878
|
*/
|
|
2215
1879
|
postId?: string;
|
|
2216
1880
|
/**
|
|
@@ -2222,11 +1886,7 @@ export type GetAnalyticsData = {
|
|
|
2222
1886
|
*/
|
|
2223
1887
|
sortBy?: 'date' | 'engagement';
|
|
2224
1888
|
/**
|
|
2225
|
-
* Filter by post source:
|
|
2226
|
-
* - `late` - Only posts scheduled/published via Late API
|
|
2227
|
-
* - `external` - Only posts synced from the platform (not posted via Late)
|
|
2228
|
-
* - `all` - All posts (default)
|
|
2229
|
-
*
|
|
1889
|
+
* Filter by post source: late (posted via Late API), external (synced from platform), all (default)
|
|
2230
1890
|
*/
|
|
2231
1891
|
source?: 'all' | 'late' | 'external';
|
|
2232
1892
|
/**
|
|
@@ -2474,9 +2134,7 @@ export type CreatePostData = {
|
|
|
2474
2134
|
body: {
|
|
2475
2135
|
title?: string;
|
|
2476
2136
|
/**
|
|
2477
|
-
* Post caption/text
|
|
2478
|
-
* Required for text-only posts. Can also be omitted if all platforms have customContent set.
|
|
2479
|
-
*
|
|
2137
|
+
* Post caption/text. Optional when media is attached or all platforms have customContent. Required for text-only posts.
|
|
2480
2138
|
*/
|
|
2481
2139
|
content?: string;
|
|
2482
2140
|
mediaItems?: Array<{
|
|
@@ -2505,11 +2163,7 @@ export type CreatePostData = {
|
|
|
2505
2163
|
isDraft?: boolean;
|
|
2506
2164
|
timezone?: string;
|
|
2507
2165
|
/**
|
|
2508
|
-
* Tags/keywords
|
|
2509
|
-
* - No count limit; duplicates are automatically removed
|
|
2510
|
-
* - Each tag must be ≤ 100 characters
|
|
2511
|
-
* - Combined total across all tags ≤ 500 characters (YouTube's limit)
|
|
2512
|
-
*
|
|
2166
|
+
* Tags/keywords. YouTube constraints: each tag max 100 chars, combined max 500 chars, duplicates auto-removed.
|
|
2513
2167
|
*/
|
|
2514
2168
|
tags?: Array<(string)>;
|
|
2515
2169
|
hashtags?: Array<(string)>;
|
|
@@ -2519,21 +2173,11 @@ export type CreatePostData = {
|
|
|
2519
2173
|
[key: string]: unknown;
|
|
2520
2174
|
};
|
|
2521
2175
|
/**
|
|
2522
|
-
* Root-level TikTok settings applied to all TikTok platforms
|
|
2523
|
-
* This is a convenience shorthand. Settings here are merged into each TikTok
|
|
2524
|
-
* platform's platformSpecificData, with platform-specific settings taking precedence.
|
|
2525
|
-
*
|
|
2176
|
+
* Root-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
|
|
2526
2177
|
*/
|
|
2527
2178
|
tiktokSettings?: TikTokPlatformData;
|
|
2528
2179
|
/**
|
|
2529
|
-
* Profile ID to schedule via queue.
|
|
2530
|
-
*
|
|
2531
|
-
* When provided (without `scheduledFor`), the post will be automatically assigned
|
|
2532
|
-
* to the next available slot from the profile's queue. The system uses distributed
|
|
2533
|
-
* locking to prevent race conditions when multiple posts are scheduled concurrently.
|
|
2534
|
-
* Do not call `/v1/queue/next-slot` and then use that time in `scheduledFor`.
|
|
2535
|
-
* That bypasses the queue system and can cause duplicate slot assignments.
|
|
2536
|
-
*
|
|
2180
|
+
* Profile ID to schedule via queue. When provided without scheduledFor, the post is auto-assigned to the next available slot. Do not call /v1/queue/next-slot and use that time in scheduledFor, as that bypasses queue locking.
|
|
2537
2181
|
*/
|
|
2538
2182
|
queuedFromProfile?: string;
|
|
2539
2183
|
/**
|
|
@@ -2584,10 +2228,7 @@ export type UpdatePostData = {
|
|
|
2584
2228
|
content?: string;
|
|
2585
2229
|
scheduledFor?: string;
|
|
2586
2230
|
/**
|
|
2587
|
-
* Root-level TikTok settings applied to all TikTok platforms
|
|
2588
|
-
* This is a convenience shorthand. Settings here are merged into each TikTok
|
|
2589
|
-
* platform's platformSpecificData, with platform-specific settings taking precedence.
|
|
2590
|
-
*
|
|
2231
|
+
* Root-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
|
|
2591
2232
|
*/
|
|
2592
2233
|
tiktokSettings?: TikTokPlatformData;
|
|
2593
2234
|
[key: string]: unknown | string | TikTokPlatformData;
|
|
@@ -2724,10 +2365,7 @@ export type GetUserError = ({
|
|
|
2724
2365
|
export type ListProfilesData = {
|
|
2725
2366
|
query?: {
|
|
2726
2367
|
/**
|
|
2727
|
-
* When true, includes profiles
|
|
2728
|
-
* Over-limit profiles will have `isOverLimit: true` in the response.
|
|
2729
|
-
* Useful for managing/deleting profiles after a plan downgrade.
|
|
2730
|
-
*
|
|
2368
|
+
* When true, includes over-limit profiles (marked with isOverLimit: true).
|
|
2731
2369
|
*/
|
|
2732
2370
|
includeOverLimit?: boolean;
|
|
2733
2371
|
};
|
|
@@ -2805,9 +2443,7 @@ export type DeleteProfileError = (unknown | {
|
|
|
2805
2443
|
export type ListAccountsData = {
|
|
2806
2444
|
query?: {
|
|
2807
2445
|
/**
|
|
2808
|
-
* When true, includes accounts from profiles
|
|
2809
|
-
* Useful for disconnecting accounts from over-limit profiles so they can be deleted.
|
|
2810
|
-
*
|
|
2446
|
+
* When true, includes accounts from over-limit profiles.
|
|
2811
2447
|
*/
|
|
2812
2448
|
includeOverLimit?: boolean;
|
|
2813
2449
|
/**
|
|
@@ -3117,14 +2753,7 @@ export type GetConnectUrlData = {
|
|
|
3117
2753
|
*/
|
|
3118
2754
|
profileId: string;
|
|
3119
2755
|
/**
|
|
3120
|
-
* Your custom redirect URL after connection completes.
|
|
3121
|
-
*
|
|
3122
|
-
* **Standard Mode:** After the user selects an account, Late redirects here with `?connected={platform}&profileId=X&username=Y`.
|
|
3123
|
-
*
|
|
3124
|
-
* **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.
|
|
3125
|
-
*
|
|
3126
|
-
* Example: `https://yourdomain.com/integrations/callback`
|
|
3127
|
-
*
|
|
2756
|
+
* Your custom redirect URL after connection completes. Standard mode appends ?connected={platform}&profileId=X&username=Y. Headless mode appends OAuth data params.
|
|
3128
2757
|
*/
|
|
3129
2758
|
redirect_url?: string;
|
|
3130
2759
|
};
|
|
@@ -3322,9 +2951,7 @@ export type SelectGoogleBusinessLocationData = {
|
|
|
3322
2951
|
*/
|
|
3323
2952
|
tempToken: string;
|
|
3324
2953
|
/**
|
|
3325
|
-
* Decoded user profile
|
|
3326
|
-
* the refresh token needed for token refresh. Always include this field.
|
|
3327
|
-
*
|
|
2954
|
+
* Decoded user profile from the OAuth callback. Contains the refresh token. Always include this field.
|
|
3328
2955
|
*/
|
|
3329
2956
|
userProfile?: {
|
|
3330
2957
|
id?: string;
|
|
@@ -3514,10 +3141,7 @@ export type GetGoogleBusinessLocationDetailsData = {
|
|
|
3514
3141
|
};
|
|
3515
3142
|
query?: {
|
|
3516
3143
|
/**
|
|
3517
|
-
* Comma-separated fields to return.
|
|
3518
|
-
* Available: name, title, phoneNumbers, categories, storefrontAddress, websiteUri,
|
|
3519
|
-
* regularHours, specialHours, serviceArea, profile, openInfo, metadata, moreHours
|
|
3520
|
-
*
|
|
3144
|
+
* Comma-separated fields to return. Available: name, title, phoneNumbers, categories, storefrontAddress, websiteUri, regularHours, specialHours, serviceArea, profile, openInfo, metadata, moreHours.
|
|
3521
3145
|
*/
|
|
3522
3146
|
readMask?: string;
|
|
3523
3147
|
};
|
|
@@ -3871,7 +3495,7 @@ export type DeleteGoogleBusinessPlaceActionError = (ErrorResponse);
|
|
|
3871
3495
|
export type GetPendingOAuthDataData = {
|
|
3872
3496
|
query: {
|
|
3873
3497
|
/**
|
|
3874
|
-
* The pending data token from the OAuth redirect URL (
|
|
3498
|
+
* The pending data token from the OAuth redirect URL (pendingDataToken parameter)
|
|
3875
3499
|
*/
|
|
3876
3500
|
token: string;
|
|
3877
3501
|
};
|
|
@@ -4262,10 +3886,7 @@ export type ConnectBlueskyCredentialsData = {
|
|
|
4262
3886
|
*/
|
|
4263
3887
|
appPassword: string;
|
|
4264
3888
|
/**
|
|
4265
|
-
* Required state
|
|
4266
|
-
* - `userId`: Your Late user ID (get from `GET /v1/users` → `currentUserId`)
|
|
4267
|
-
* - `profileId`: The profile ID to connect the account to (get from `GET /v1/profiles`)
|
|
4268
|
-
*
|
|
3889
|
+
* Required state formatted as {userId}-{profileId}. Get userId from GET /v1/users and profileId from GET /v1/profiles.
|
|
4269
3890
|
*/
|
|
4270
3891
|
state: string;
|
|
4271
3892
|
/**
|
|
@@ -4323,10 +3944,7 @@ export type GetTelegramConnectStatusError = (unknown | {
|
|
|
4323
3944
|
export type InitiateTelegramConnectData = {
|
|
4324
3945
|
body: {
|
|
4325
3946
|
/**
|
|
4326
|
-
* The Telegram chat ID.
|
|
4327
|
-
* - Numeric ID (e.g., "-1001234567890")
|
|
4328
|
-
* - Username with @ prefix (e.g., "@mychannel")
|
|
4329
|
-
*
|
|
3947
|
+
* The Telegram chat ID. Numeric ID (e.g. "-1001234567890") or username with @ prefix (e.g. "@mychannel").
|
|
4330
3948
|
*/
|
|
4331
3949
|
chatId: string;
|
|
4332
3950
|
/**
|
|
@@ -4459,31 +4077,19 @@ export type GetLinkedInAggregateAnalyticsData = {
|
|
|
4459
4077
|
};
|
|
4460
4078
|
query?: {
|
|
4461
4079
|
/**
|
|
4462
|
-
*
|
|
4463
|
-
* - `TOTAL` (default): Returns single totals for each metric
|
|
4464
|
-
* - `DAILY`: Returns daily breakdown of metrics
|
|
4465
|
-
*
|
|
4466
|
-
* Note: `MEMBERS_REACHED` metric is not available with `DAILY` aggregation.
|
|
4467
|
-
*
|
|
4080
|
+
* TOTAL (default, lifetime totals) or DAILY (time series). MEMBERS_REACHED not available with DAILY.
|
|
4468
4081
|
*/
|
|
4469
4082
|
aggregation?: 'TOTAL' | 'DAILY';
|
|
4470
4083
|
/**
|
|
4471
|
-
* End date
|
|
4472
|
-
* If provided without startDate, startDate defaults to 30 days before endDate.
|
|
4473
|
-
*
|
|
4084
|
+
* End date (YYYY-MM-DD, exclusive). Defaults to today if omitted.
|
|
4474
4085
|
*/
|
|
4475
4086
|
endDate?: string;
|
|
4476
4087
|
/**
|
|
4477
|
-
* Comma-separated
|
|
4478
|
-
* Valid values: IMPRESSION, MEMBERS_REACHED, REACTION, COMMENT, RESHARE
|
|
4479
|
-
*
|
|
4088
|
+
* Comma-separated metrics: IMPRESSION, MEMBERS_REACHED, REACTION, COMMENT, RESHARE. Omit for all.
|
|
4480
4089
|
*/
|
|
4481
4090
|
metrics?: string;
|
|
4482
4091
|
/**
|
|
4483
|
-
* Start date
|
|
4484
|
-
* If provided without endDate, endDate defaults to today.
|
|
4485
|
-
* If omitted entirely, returns lifetime analytics.
|
|
4486
|
-
*
|
|
4092
|
+
* Start date (YYYY-MM-DD). If omitted, returns lifetime analytics.
|
|
4487
4093
|
*/
|
|
4488
4094
|
startDate?: string;
|
|
4489
4095
|
};
|
|
@@ -4610,17 +4216,11 @@ export type GetLinkedInMentionsData = {
|
|
|
4610
4216
|
};
|
|
4611
4217
|
query: {
|
|
4612
4218
|
/**
|
|
4613
|
-
*
|
|
4614
|
-
* - **Person mentions:** Required for clickable mentions. If not provided, a name is derived from the vanity URL which may not match exactly.
|
|
4615
|
-
* - **Organization mentions:** Optional. If not provided, the company name is automatically retrieved from LinkedIn.
|
|
4616
|
-
*
|
|
4219
|
+
* Exact display name as shown on LinkedIn. Required for person mentions to be clickable. Optional for org mentions.
|
|
4617
4220
|
*/
|
|
4618
4221
|
displayName?: string;
|
|
4619
4222
|
/**
|
|
4620
4223
|
* LinkedIn profile URL, company URL, or vanity name.
|
|
4621
|
-
* - Person: `miquelpalet`, `linkedin.com/in/miquelpalet`
|
|
4622
|
-
* - Organization: `company/microsoft`, `linkedin.com/company/microsoft`
|
|
4623
|
-
*
|
|
4624
4224
|
*/
|
|
4625
4225
|
url: string;
|
|
4626
4226
|
};
|
|
@@ -5151,73 +4751,6 @@ export type GetWebhookLogsError = ({
|
|
|
5151
4751
|
error?: string;
|
|
5152
4752
|
});
|
|
5153
4753
|
|
|
5154
|
-
export type ListLogsData = {
|
|
5155
|
-
query?: {
|
|
5156
|
-
/**
|
|
5157
|
-
* Filter by action type
|
|
5158
|
-
*/
|
|
5159
|
-
action?: 'publish' | 'retry' | 'media_upload' | 'rate_limit_pause' | 'token_refresh' | 'cancelled' | 'all';
|
|
5160
|
-
/**
|
|
5161
|
-
* Number of days to look back (max 7)
|
|
5162
|
-
*/
|
|
5163
|
-
days?: number;
|
|
5164
|
-
/**
|
|
5165
|
-
* Maximum number of logs to return (max 100)
|
|
5166
|
-
*/
|
|
5167
|
-
limit?: number;
|
|
5168
|
-
/**
|
|
5169
|
-
* Filter by platform
|
|
5170
|
-
*/
|
|
5171
|
-
platform?: 'tiktok' | 'instagram' | 'facebook' | 'youtube' | 'linkedin' | 'twitter' | 'threads' | 'pinterest' | 'reddit' | 'bluesky' | 'googlebusiness' | 'telegram' | 'snapchat' | 'all';
|
|
5172
|
-
/**
|
|
5173
|
-
* Number of logs to skip (for pagination)
|
|
5174
|
-
*/
|
|
5175
|
-
skip?: number;
|
|
5176
|
-
/**
|
|
5177
|
-
* Filter by log status
|
|
5178
|
-
*/
|
|
5179
|
-
status?: 'success' | 'failed' | 'pending' | 'skipped' | 'all';
|
|
5180
|
-
};
|
|
5181
|
-
};
|
|
5182
|
-
|
|
5183
|
-
export type ListLogsResponse = ({
|
|
5184
|
-
logs?: Array<PostLog>;
|
|
5185
|
-
pagination?: {
|
|
5186
|
-
/**
|
|
5187
|
-
* Total number of logs matching the query
|
|
5188
|
-
*/
|
|
5189
|
-
total?: number;
|
|
5190
|
-
limit?: number;
|
|
5191
|
-
skip?: number;
|
|
5192
|
-
/**
|
|
5193
|
-
* Total number of pages
|
|
5194
|
-
*/
|
|
5195
|
-
pages?: number;
|
|
5196
|
-
hasMore?: boolean;
|
|
5197
|
-
};
|
|
5198
|
-
});
|
|
5199
|
-
|
|
5200
|
-
export type ListLogsError = ({
|
|
5201
|
-
error?: string;
|
|
5202
|
-
});
|
|
5203
|
-
|
|
5204
|
-
export type GetLogData = {
|
|
5205
|
-
path: {
|
|
5206
|
-
/**
|
|
5207
|
-
* The log entry ID
|
|
5208
|
-
*/
|
|
5209
|
-
logId: string;
|
|
5210
|
-
};
|
|
5211
|
-
};
|
|
5212
|
-
|
|
5213
|
-
export type GetLogResponse = ({
|
|
5214
|
-
log?: PostLogDetail;
|
|
5215
|
-
});
|
|
5216
|
-
|
|
5217
|
-
export type GetLogError = ({
|
|
5218
|
-
error?: string;
|
|
5219
|
-
} | unknown);
|
|
5220
|
-
|
|
5221
4754
|
export type ListPostsLogsData = {
|
|
5222
4755
|
query?: {
|
|
5223
4756
|
/**
|
|
@@ -6043,12 +5576,7 @@ export type ListInboxCommentsError = ({
|
|
|
6043
5576
|
export type GetInboxPostCommentsData = {
|
|
6044
5577
|
path: {
|
|
6045
5578
|
/**
|
|
6046
|
-
*
|
|
6047
|
-
*
|
|
6048
|
-
* **LinkedIn:** For your own posts, the full URN stored in Late (e.g., `urn:li:share:7429218977714745345`) is used automatically.
|
|
6049
|
-
* 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:`).
|
|
6050
|
-
* Note: LinkedIn post URLs use activity IDs (`linkedin.com/feed/update/urn:li:activity:XXXX`).
|
|
6051
|
-
*
|
|
5579
|
+
* Late post ID or platform-specific post ID. Late IDs are auto-resolved. LinkedIn third-party posts accept full activity URN or numeric ID.
|
|
6052
5580
|
*/
|
|
6053
5581
|
postId: string;
|
|
6054
5582
|
};
|
|
@@ -6185,10 +5713,7 @@ export type ReplyToInboxPostData = {
|
|
|
6185
5713
|
};
|
|
6186
5714
|
path: {
|
|
6187
5715
|
/**
|
|
6188
|
-
*
|
|
6189
|
-
*
|
|
6190
|
-
* **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.
|
|
6191
|
-
*
|
|
5716
|
+
* Late post ID or platform-specific post ID. LinkedIn third-party posts accept full activity URN or numeric ID.
|
|
6192
5717
|
*/
|
|
6193
5718
|
postId: string;
|
|
6194
5719
|
};
|
|
@@ -6213,10 +5738,7 @@ export type ReplyToInboxPostError = ({
|
|
|
6213
5738
|
export type DeleteInboxCommentData = {
|
|
6214
5739
|
path: {
|
|
6215
5740
|
/**
|
|
6216
|
-
*
|
|
6217
|
-
*
|
|
6218
|
-
* **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.
|
|
6219
|
-
*
|
|
5741
|
+
* Late post ID or platform-specific post ID. LinkedIn third-party posts accept full activity URN or numeric ID.
|
|
6220
5742
|
*/
|
|
6221
5743
|
postId: string;
|
|
6222
5744
|
};
|