late-sdk 0.0.102 → 0.0.104

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.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -52
  3. data/lib/late-sdk/version.rb +1 -1
  4. data/lib/late-sdk.rb +0 -41
  5. data/openapi.yaml +1 -737
  6. data/zernio-sdk-0.0.104.gem +0 -0
  7. metadata +3 -167
  8. data/docs/CaptionResponse.md +0 -18
  9. data/docs/CheckInstagramHashtags200Response.md +0 -22
  10. data/docs/CheckInstagramHashtags200ResponseResultsInner.md +0 -24
  11. data/docs/CheckInstagramHashtags200ResponseSummary.md +0 -22
  12. data/docs/CheckInstagramHashtagsRequest.md +0 -18
  13. data/docs/DownloadBlueskyMedia200Response.md +0 -26
  14. data/docs/DownloadFacebookVideo200Response.md +0 -24
  15. data/docs/DownloadFormat.md +0 -26
  16. data/docs/DownloadInstagramMedia200Response.md +0 -22
  17. data/docs/DownloadResponse.md +0 -26
  18. data/docs/DownloadTikTokVideo200Response.md +0 -24
  19. data/docs/DownloadTikTokVideo200ResponseFormatsInner.md +0 -22
  20. data/docs/DownloadYouTubeVideo200Response.md +0 -24
  21. data/docs/DownloadYouTubeVideo200ResponseFormatsInner.md +0 -28
  22. data/docs/GetYouTubeTranscript200Response.md +0 -26
  23. data/docs/GetYouTubeTranscript200ResponseSegmentsInner.md +0 -22
  24. data/docs/HashtagCheckResponse.md +0 -18
  25. data/docs/HashtagInfo.md +0 -22
  26. data/docs/ToolsApi.md +0 -663
  27. data/docs/TranscriptResponse.md +0 -22
  28. data/docs/TranscriptSegment.md +0 -22
  29. data/docs/ValidateApi.md +0 -287
  30. data/docs/ValidateMedia200Response.md +0 -32
  31. data/docs/ValidateMedia200ResponsePlatformLimitsValue.md +0 -22
  32. data/docs/ValidateMediaRequest.md +0 -18
  33. data/docs/ValidatePost200Response.md +0 -49
  34. data/docs/ValidatePost200ResponseOneOf.md +0 -22
  35. data/docs/ValidatePost200ResponseOneOf1.md +0 -22
  36. data/docs/ValidatePost200ResponseOneOf1ErrorsInner.md +0 -20
  37. data/docs/ValidatePost200ResponseOneOfWarningsInner.md +0 -20
  38. data/docs/ValidatePostLength200Response.md +0 -20
  39. data/docs/ValidatePostLength200ResponsePlatformsValue.md +0 -22
  40. data/docs/ValidatePostLengthRequest.md +0 -18
  41. data/docs/ValidatePostRequest.md +0 -22
  42. data/docs/ValidatePostRequestMediaItemsInner.md +0 -20
  43. data/docs/ValidatePostRequestPlatformsInner.md +0 -24
  44. data/docs/ValidatePostRequestPlatformsInnerCustomMediaInner.md +0 -20
  45. data/docs/ValidateSubreddit200Response.md +0 -49
  46. data/docs/ValidateSubreddit200ResponseOneOf.md +0 -20
  47. data/docs/ValidateSubreddit200ResponseOneOf1.md +0 -20
  48. data/docs/ValidateSubreddit200ResponseOneOfSubreddit.md +0 -32
  49. data/lib/late-sdk/api/tools_api.rb +0 -649
  50. data/lib/late-sdk/api/validate_api.rb +0 -290
  51. data/lib/late-sdk/models/caption_response.rb +0 -147
  52. data/lib/late-sdk/models/check_instagram_hashtags200_response.rb +0 -167
  53. data/lib/late-sdk/models/check_instagram_hashtags200_response_results_inner.rb +0 -208
  54. data/lib/late-sdk/models/check_instagram_hashtags200_response_summary.rb +0 -165
  55. data/lib/late-sdk/models/check_instagram_hashtags_request.rb +0 -175
  56. data/lib/late-sdk/models/download_bluesky_media200_response.rb +0 -183
  57. data/lib/late-sdk/models/download_facebook_video200_response.rb +0 -174
  58. data/lib/late-sdk/models/download_format.rb +0 -183
  59. data/lib/late-sdk/models/download_instagram_media200_response.rb +0 -165
  60. data/lib/late-sdk/models/download_response.rb +0 -185
  61. data/lib/late-sdk/models/download_tik_tok_video200_response.rb +0 -176
  62. data/lib/late-sdk/models/download_tik_tok_video200_response_formats_inner.rb +0 -165
  63. data/lib/late-sdk/models/download_you_tube_video200_response.rb +0 -176
  64. data/lib/late-sdk/models/download_you_tube_video200_response_formats_inner.rb +0 -192
  65. data/lib/late-sdk/models/get_you_tube_transcript200_response.rb +0 -185
  66. data/lib/late-sdk/models/get_you_tube_transcript200_response_segments_inner.rb +0 -165
  67. data/lib/late-sdk/models/hashtag_check_response.rb +0 -149
  68. data/lib/late-sdk/models/hashtag_info.rb +0 -199
  69. data/lib/late-sdk/models/transcript_response.rb +0 -167
  70. data/lib/late-sdk/models/transcript_segment.rb +0 -165
  71. data/lib/late-sdk/models/validate_media200_response.rb +0 -249
  72. data/lib/late-sdk/models/validate_media200_response_platform_limits_value.rb +0 -166
  73. data/lib/late-sdk/models/validate_media_request.rb +0 -165
  74. data/lib/late-sdk/models/validate_post200_response.rb +0 -104
  75. data/lib/late-sdk/models/validate_post200_response_one_of.rb +0 -168
  76. data/lib/late-sdk/models/validate_post200_response_one_of1.rb +0 -170
  77. data/lib/late-sdk/models/validate_post200_response_one_of1_errors_inner.rb +0 -156
  78. data/lib/late-sdk/models/validate_post200_response_one_of_warnings_inner.rb +0 -156
  79. data/lib/late-sdk/models/validate_post_length200_response.rb +0 -158
  80. data/lib/late-sdk/models/validate_post_length200_response_platforms_value.rb +0 -168
  81. data/lib/late-sdk/models/validate_post_length_request.rb +0 -165
  82. data/lib/late-sdk/models/validate_post_request.rb +0 -189
  83. data/lib/late-sdk/models/validate_post_request_media_items_inner.rb +0 -190
  84. data/lib/late-sdk/models/validate_post_request_platforms_inner.rb +0 -217
  85. data/lib/late-sdk/models/validate_post_request_platforms_inner_custom_media_inner.rb +0 -190
  86. data/lib/late-sdk/models/validate_subreddit200_response.rb +0 -104
  87. data/lib/late-sdk/models/validate_subreddit200_response_one_of.rb +0 -157
  88. data/lib/late-sdk/models/validate_subreddit200_response_one_of1.rb +0 -157
  89. data/lib/late-sdk/models/validate_subreddit200_response_one_of_subreddit.rb +0 -244
  90. data/spec/api/tools_api_spec.rb +0 -152
  91. data/spec/api/validate_api_spec.rb +0 -83
  92. data/spec/models/caption_response_spec.rb +0 -36
  93. data/spec/models/check_instagram_hashtags200_response_results_inner_spec.rb +0 -58
  94. data/spec/models/check_instagram_hashtags200_response_spec.rb +0 -48
  95. data/spec/models/check_instagram_hashtags200_response_summary_spec.rb +0 -48
  96. data/spec/models/check_instagram_hashtags_request_spec.rb +0 -36
  97. data/spec/models/download_bluesky_media200_response_spec.rb +0 -60
  98. data/spec/models/download_facebook_video200_response_spec.rb +0 -54
  99. data/spec/models/download_format_spec.rb +0 -60
  100. data/spec/models/download_instagram_media200_response_spec.rb +0 -48
  101. data/spec/models/download_response_spec.rb +0 -60
  102. data/spec/models/download_tik_tok_video200_response_formats_inner_spec.rb +0 -48
  103. data/spec/models/download_tik_tok_video200_response_spec.rb +0 -54
  104. data/spec/models/download_you_tube_video200_response_formats_inner_spec.rb +0 -66
  105. data/spec/models/download_you_tube_video200_response_spec.rb +0 -54
  106. data/spec/models/get_you_tube_transcript200_response_segments_inner_spec.rb +0 -48
  107. data/spec/models/get_you_tube_transcript200_response_spec.rb +0 -60
  108. data/spec/models/hashtag_check_response_spec.rb +0 -36
  109. data/spec/models/hashtag_info_spec.rb +0 -52
  110. data/spec/models/transcript_response_spec.rb +0 -48
  111. data/spec/models/transcript_segment_spec.rb +0 -48
  112. data/spec/models/validate_media200_response_platform_limits_value_spec.rb +0 -48
  113. data/spec/models/validate_media200_response_spec.rb +0 -82
  114. data/spec/models/validate_media_request_spec.rb +0 -36
  115. data/spec/models/validate_post200_response_one_of1_errors_inner_spec.rb +0 -42
  116. data/spec/models/validate_post200_response_one_of1_spec.rb +0 -48
  117. data/spec/models/validate_post200_response_one_of_spec.rb +0 -48
  118. data/spec/models/validate_post200_response_one_of_warnings_inner_spec.rb +0 -42
  119. data/spec/models/validate_post200_response_spec.rb +0 -32
  120. data/spec/models/validate_post_length200_response_platforms_value_spec.rb +0 -48
  121. data/spec/models/validate_post_length200_response_spec.rb +0 -42
  122. data/spec/models/validate_post_length_request_spec.rb +0 -36
  123. data/spec/models/validate_post_request_media_items_inner_spec.rb +0 -46
  124. data/spec/models/validate_post_request_platforms_inner_custom_media_inner_spec.rb +0 -46
  125. data/spec/models/validate_post_request_platforms_inner_spec.rb +0 -58
  126. data/spec/models/validate_post_request_spec.rb +0 -48
  127. data/spec/models/validate_subreddit200_response_one_of1_spec.rb +0 -42
  128. data/spec/models/validate_subreddit200_response_one_of_spec.rb +0 -42
  129. data/spec/models/validate_subreddit200_response_one_of_subreddit_spec.rb +0 -82
  130. data/spec/models/validate_subreddit200_response_spec.rb +0 -32
  131. data/zernio-sdk-0.0.102.gem +0 -0
data/openapi.yaml CHANGED
@@ -164,7 +164,6 @@ tags:
164
164
  - name: Invites
165
165
  - name: Connect
166
166
  - name: Media
167
- # - name: Video Clips # AI Clipping feature temporarily disabled
168
167
  - name: Reddit Search
169
168
  - name: Facebook
170
169
  - name: GMB Reviews
@@ -201,14 +200,6 @@ tags:
201
200
  description: |
202
201
  X/Twitter-specific engagement endpoints for retweeting, bookmarking, and following.
203
202
  Rate limits: 50 requests per 15-min window per user. Retweets share the 300/3hr creation limit with tweet creation.
204
- - name: Tools
205
- description: |
206
- Media download and utility tools. Available to paid plans only.
207
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
208
- All responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
209
- - name: Validate
210
- description: |
211
- Pre-flight validation endpoints. Check post content, character limits, media URLs, and subreddit existence before publishing.
212
203
  - name: Account Settings
213
204
  description: |
214
205
  Platform-specific account settings: Facebook persistent menu, Instagram ice breakers, and Telegram bot commands.
@@ -2108,8 +2099,6 @@ components:
2108
2099
  uploads: { type: integer }
2109
2100
  profiles: { type: integer }
2110
2101
  lastReset: { type: string, format: date-time }
2111
- # VideoClipJob, VideoClip, VideoClipJobProcessing, VideoClipJobCompleted, VideoClipJobFailed, VideoClipUsageStats
2112
- # schemas removed - AI Clipping feature temporarily disabled
2113
2102
  PostAnalytics:
2114
2103
  type: object
2115
2104
  properties:
@@ -2531,79 +2520,6 @@ components:
2531
2520
  format: date-time
2532
2521
  timezone:
2533
2522
  type: string
2534
- # Tools Responses
2535
- DownloadFormat:
2536
- type: object
2537
- properties:
2538
- formatId:
2539
- type: string
2540
- ext:
2541
- type: string
2542
- resolution:
2543
- type: string
2544
- filesize:
2545
- type: integer
2546
- quality:
2547
- type: string
2548
- DownloadResponse:
2549
- type: object
2550
- properties:
2551
- url:
2552
- type: string
2553
- format: uri
2554
- title:
2555
- type: string
2556
- thumbnail:
2557
- type: string
2558
- format: uri
2559
- duration:
2560
- type: integer
2561
- formats:
2562
- type: array
2563
- items:
2564
- $ref: '#/components/schemas/DownloadFormat'
2565
- TranscriptSegment:
2566
- type: object
2567
- properties:
2568
- text:
2569
- type: string
2570
- start:
2571
- type: number
2572
- duration:
2573
- type: number
2574
- TranscriptResponse:
2575
- type: object
2576
- properties:
2577
- transcript:
2578
- type: string
2579
- segments:
2580
- type: array
2581
- items:
2582
- $ref: '#/components/schemas/TranscriptSegment'
2583
- language:
2584
- type: string
2585
- HashtagInfo:
2586
- type: object
2587
- properties:
2588
- hashtag:
2589
- type: string
2590
- status:
2591
- type: string
2592
- enum: [safe, banned, restricted, unknown]
2593
- postCount:
2594
- type: integer
2595
- HashtagCheckResponse:
2596
- type: object
2597
- properties:
2598
- hashtags:
2599
- type: array
2600
- items:
2601
- $ref: '#/components/schemas/HashtagInfo'
2602
- CaptionResponse:
2603
- type: object
2604
- properties:
2605
- caption:
2606
- type: string
2607
2523
  # Users Responses
2608
2524
  User:
2609
2525
  type: object
@@ -2869,656 +2785,7 @@ webhooks:
2869
2785
  security:
2870
2786
  - bearerAuth: []
2871
2787
  paths:
2872
- # ============================================
2873
- # Tools API - Media Download & Utilities
2874
- # ============================================
2875
- /v1/tools/youtube/download:
2876
- get:
2877
- operationId: downloadYouTubeVideo
2878
- tags: [Tools]
2879
- summary: Download YouTube video
2880
- description: |
2881
- Download YouTube videos or audio. Returns available formats or direct download URL.
2882
-
2883
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
2884
- security:
2885
- - bearerAuth: []
2886
- parameters:
2887
- - name: url
2888
- in: query
2889
- required: true
2890
- description: YouTube video URL or video ID
2891
- schema:
2892
- type: string
2893
- example: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
2894
- - name: action
2895
- in: query
2896
- description: "Action to perform: 'download' returns download URL, 'formats' lists available formats"
2897
- schema:
2898
- type: string
2899
- enum: [download, formats]
2900
- default: download
2901
- - name: format
2902
- in: query
2903
- description: Desired format (when action=download)
2904
- schema:
2905
- type: string
2906
- enum: [video, audio]
2907
- default: video
2908
- - name: quality
2909
- in: query
2910
- description: Desired quality (when action=download)
2911
- schema:
2912
- type: string
2913
- enum: [hd, sd]
2914
- default: hd
2915
- - name: formatId
2916
- in: query
2917
- description: Specific format ID from formats list
2918
- schema:
2919
- type: string
2920
- responses:
2921
- "200":
2922
- description: Success
2923
- headers:
2924
- X-RateLimit-Limit:
2925
- schema: { type: string }
2926
- description: Daily rate limit
2927
- X-RateLimit-Remaining:
2928
- schema: { type: string }
2929
- description: Remaining calls today
2930
- X-RateLimit-Reset:
2931
- schema: { type: string }
2932
- description: Unix timestamp when limit resets
2933
- content:
2934
- application/json:
2935
- schema:
2936
- type: object
2937
- properties:
2938
- success: { type: boolean }
2939
- title: { type: string }
2940
- downloadUrl: { type: string, format: uri }
2941
- formats:
2942
- type: array
2943
- items:
2944
- type: object
2945
- properties:
2946
- id: { type: string }
2947
- label: { type: string }
2948
- ext: { type: string }
2949
- type: { type: string }
2950
- height: { type: integer }
2951
- width: { type: integer }
2952
- "401":
2953
- $ref: '#/components/responses/Unauthorized'
2954
- "403":
2955
- description: Tools API not available on free plan
2956
- "429":
2957
- description: Daily rate limit exceeded
2958
-
2959
- /v1/tools/youtube/transcript:
2960
- get:
2961
- operationId: getYouTubeTranscript
2962
- tags: [Tools]
2963
- summary: Get YouTube transcript
2964
- description: |
2965
- Extract transcript/captions from a YouTube video.
2966
-
2967
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
2968
- security:
2969
- - bearerAuth: []
2970
- parameters:
2971
- - name: url
2972
- in: query
2973
- required: true
2974
- description: YouTube video URL or video ID
2975
- schema:
2976
- type: string
2977
- - name: lang
2978
- in: query
2979
- description: Language code for transcript
2980
- schema:
2981
- type: string
2982
- default: en
2983
- responses:
2984
- "200":
2985
- description: Success
2986
- content:
2987
- application/json:
2988
- schema:
2989
- type: object
2990
- properties:
2991
- success: { type: boolean }
2992
- videoId: { type: string }
2993
- language: { type: string }
2994
- fullText: { type: string }
2995
- segments:
2996
- type: array
2997
- items:
2998
- type: object
2999
- properties:
3000
- text: { type: string }
3001
- start: { type: number }
3002
- duration: { type: number }
3003
- "404":
3004
- description: No transcript available
3005
- "503":
3006
- description: Transcript service temporarily unavailable
3007
-
3008
- /v1/tools/instagram/download:
3009
- get:
3010
- operationId: downloadInstagramMedia
3011
- tags: [Tools]
3012
- summary: Download Instagram media
3013
- description: |
3014
- Download Instagram reels, posts, or photos.
3015
-
3016
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3017
- security:
3018
- - bearerAuth: []
3019
- parameters:
3020
- - name: url
3021
- in: query
3022
- required: true
3023
- description: Instagram reel or post URL
3024
- schema:
3025
- type: string
3026
- example: "https://www.instagram.com/reel/ABC123/"
3027
- responses:
3028
- "200":
3029
- description: Success
3030
- content:
3031
- application/json:
3032
- schema:
3033
- type: object
3034
- properties:
3035
- success: { type: boolean }
3036
- title: { type: string }
3037
- downloadUrl: { type: string, format: uri }
3038
-
3039
- /v1/tools/instagram/hashtag-checker:
3040
- post:
3041
- operationId: checkInstagramHashtags
3042
- tags: [Tools]
3043
- summary: Check IG hashtag bans
3044
- description: |
3045
- Check if Instagram hashtags are banned, restricted, or safe to use.
3046
-
3047
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3048
- security:
3049
- - bearerAuth: []
3050
- requestBody:
3051
- required: true
3052
- content:
3053
- application/json:
3054
- schema:
3055
- type: object
3056
- required: [hashtags]
3057
- properties:
3058
- hashtags:
3059
- type: array
3060
- maxItems: 20
3061
- items:
3062
- type: string
3063
- example: ["travel", "followforfollow", "fitness"]
3064
- responses:
3065
- "200":
3066
- description: Success
3067
- content:
3068
- application/json:
3069
- schema:
3070
- type: object
3071
- properties:
3072
- success: { type: boolean }
3073
- results:
3074
- type: array
3075
- items:
3076
- type: object
3077
- properties:
3078
- hashtag: { type: string }
3079
- status:
3080
- type: string
3081
- enum: [banned, restricted, safe, unknown]
3082
- reason: { type: string }
3083
- confidence: { type: number }
3084
- summary:
3085
- type: object
3086
- properties:
3087
- banned: { type: integer }
3088
- restricted: { type: integer }
3089
- safe: { type: integer }
3090
-
3091
- /v1/tools/tiktok/download:
3092
- get:
3093
- operationId: downloadTikTokVideo
3094
- tags: [Tools]
3095
- summary: Download TikTok video
3096
- description: |
3097
- Download TikTok videos with or without watermark.
3098
-
3099
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3100
- security:
3101
- - bearerAuth: []
3102
- parameters:
3103
- - name: url
3104
- in: query
3105
- required: true
3106
- description: TikTok video URL or ID
3107
- schema:
3108
- type: string
3109
- - name: action
3110
- in: query
3111
- description: "'formats' to list available formats"
3112
- schema:
3113
- type: string
3114
- enum: [download, formats]
3115
- default: download
3116
- - name: formatId
3117
- in: query
3118
- description: Specific format ID (0 = no watermark, etc.)
3119
- schema:
3120
- type: string
3121
- responses:
3122
- "200":
3123
- description: Success
3124
- content:
3125
- application/json:
3126
- schema:
3127
- type: object
3128
- properties:
3129
- success: { type: boolean }
3130
- title: { type: string }
3131
- downloadUrl: { type: string, format: uri }
3132
- formats:
3133
- type: array
3134
- items:
3135
- type: object
3136
- properties:
3137
- id: { type: string }
3138
- label: { type: string }
3139
- ext: { type: string }
3140
-
3141
- /v1/tools/twitter/download:
3142
- get:
3143
- operationId: downloadTwitterMedia
3144
- tags: [Tools]
3145
- summary: Download Twitter/X media
3146
- description: |
3147
- Download videos from Twitter/X posts.
3148
-
3149
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3150
- security:
3151
- - bearerAuth: []
3152
- parameters:
3153
- - name: url
3154
- in: query
3155
- required: true
3156
- description: Twitter/X post URL
3157
- schema:
3158
- type: string
3159
- example: "https://x.com/user/status/123456789"
3160
- - name: action
3161
- in: query
3162
- schema:
3163
- type: string
3164
- enum: [download, formats]
3165
- default: download
3166
- - name: formatId
3167
- in: query
3168
- schema:
3169
- type: string
3170
- responses:
3171
- "200":
3172
- description: Success
3173
- content:
3174
- application/json:
3175
- schema:
3176
- type: object
3177
- properties:
3178
- success: { type: boolean }
3179
- title: { type: string }
3180
- downloadUrl: { type: string, format: uri }
3181
-
3182
- /v1/tools/facebook/download:
3183
- get:
3184
- operationId: downloadFacebookVideo
3185
- tags: [Tools]
3186
- summary: Download Facebook video
3187
- description: |
3188
- Download videos and reels from Facebook.
3189
-
3190
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3191
- security:
3192
- - bearerAuth: []
3193
- parameters:
3194
- - name: url
3195
- in: query
3196
- required: true
3197
- description: Facebook video or reel URL
3198
- schema:
3199
- type: string
3200
- responses:
3201
- "200":
3202
- description: Success
3203
- content:
3204
- application/json:
3205
- schema:
3206
- type: object
3207
- properties:
3208
- success: { type: boolean }
3209
- title: { type: string }
3210
- downloadUrl: { type: string, format: uri }
3211
- thumbnail: { type: string, format: uri }
3212
-
3213
- /v1/tools/linkedin/download:
3214
- get:
3215
- operationId: downloadLinkedInVideo
3216
- tags: [Tools]
3217
- summary: Download LinkedIn video
3218
- description: |
3219
- Download videos from LinkedIn posts.
3220
-
3221
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3222
- security:
3223
- - bearerAuth: []
3224
- parameters:
3225
- - name: url
3226
- in: query
3227
- required: true
3228
- description: LinkedIn post URL
3229
- schema:
3230
- type: string
3231
- responses:
3232
- "200":
3233
- description: Success
3234
- content:
3235
- application/json:
3236
- schema:
3237
- type: object
3238
- properties:
3239
- success: { type: boolean }
3240
- title: { type: string }
3241
- downloadUrl: { type: string, format: uri }
3242
-
3243
- /v1/tools/bluesky/download:
3244
- get:
3245
- operationId: downloadBlueskyMedia
3246
- tags: [Tools]
3247
- summary: Download Bluesky media
3248
- description: |
3249
- Download videos from Bluesky posts.
3250
-
3251
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3252
- security:
3253
- - bearerAuth: []
3254
- parameters:
3255
- - name: url
3256
- in: query
3257
- required: true
3258
- description: Bluesky post URL
3259
- schema:
3260
- type: string
3261
- example: "https://bsky.app/profile/user.bsky.social/post/abc123"
3262
- responses:
3263
- "200":
3264
- description: Success
3265
- content:
3266
- application/json:
3267
- schema:
3268
- type: object
3269
- properties:
3270
- success: { type: boolean }
3271
- title: { type: string }
3272
- text: { type: string }
3273
- downloadUrl: { type: string, format: uri }
3274
- thumbnail: { type: string, format: uri }
3275
-
3276
- # ============================================
3277
- # Validate
3278
- # ============================================
3279
- /v1/tools/validate/post-length:
3280
- post:
3281
- operationId: validatePostLength
3282
- tags: [Validate]
3283
- summary: Validate post character count
3284
- description: |
3285
- Check weighted character count per platform and whether the text is within each platform's limit.
3286
-
3287
- Twitter/X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars). All other platforms use plain character length.
3288
-
3289
- Returns counts and limits for all 15 supported platform variants.
3290
- security:
3291
- - bearerAuth: []
3292
- requestBody:
3293
- required: true
3294
- content:
3295
- application/json:
3296
- schema:
3297
- type: object
3298
- required: [text]
3299
- properties:
3300
- text:
3301
- type: string
3302
- description: The post text to check
3303
- example: "Check out https://zernio.com for scheduling posts!"
3304
- responses:
3305
- "200":
3306
- description: Character counts per platform
3307
- content:
3308
- application/json:
3309
- schema:
3310
- type: object
3311
- properties:
3312
- text: { type: string }
3313
- platforms:
3314
- type: object
3315
- additionalProperties:
3316
- type: object
3317
- properties:
3318
- count: { type: integer, description: "Character count for this platform" }
3319
- limit: { type: integer, description: "Maximum allowed characters" }
3320
- valid: { type: boolean, description: "Whether the text is within the limit" }
3321
- example:
3322
- twitter: { count: 51, limit: 280, valid: true }
3323
- twitterPremium: { count: 51, limit: 25000, valid: true }
3324
- instagram: { count: 51, limit: 2200, valid: true }
3325
- bluesky: { count: 51, limit: 300, valid: true }
3326
- snapchat: { count: 51, limit: 160, valid: true }
3327
-
3328
- /v1/tools/validate/post:
3329
- post:
3330
- operationId: validatePost
3331
- tags: [Validate]
3332
- summary: Validate post content
3333
- description: |
3334
- Dry-run the full post validation pipeline without publishing. Catches issues like missing media for Instagram/TikTok/YouTube, hashtag limits, invalid thread formats, Facebook Reel requirements, and character limit violations.
3335
-
3336
- Accepts the same body as `POST /v1/posts`. Does NOT validate accounts, process media, or track usage. This is content-only validation.
3337
-
3338
- Returns errors for failures and warnings for near-limit content (>90% of character limit).
3339
- security:
3340
- - bearerAuth: []
3341
- requestBody:
3342
- required: true
3343
- content:
3344
- application/json:
3345
- schema:
3346
- type: object
3347
- required: [platforms]
3348
- properties:
3349
- content:
3350
- type: string
3351
- description: Post text content
3352
- example: "Check out this video!"
3353
- platforms:
3354
- type: array
3355
- description: Target platforms (same format as POST /v1/posts)
3356
- items:
3357
- type: object
3358
- required: [platform]
3359
- properties:
3360
- platform:
3361
- type: string
3362
- enum: [twitter, instagram, tiktok, youtube, facebook, linkedin, bluesky, threads, reddit, pinterest, telegram, snapchat, googlebusiness]
3363
- customContent: { type: string }
3364
- platformSpecificData: { type: object }
3365
- customMedia:
3366
- type: array
3367
- items:
3368
- type: object
3369
- properties:
3370
- url: { type: string }
3371
- type: { type: string, enum: [image, video] }
3372
- example:
3373
- - platform: youtube
3374
- - platform: twitter
3375
- mediaItems:
3376
- type: array
3377
- description: Root media items shared across platforms
3378
- items:
3379
- type: object
3380
- properties:
3381
- url: { type: string, format: uri }
3382
- type: { type: string, enum: [image, video] }
3383
- responses:
3384
- "200":
3385
- description: Validation result
3386
- content:
3387
- application/json:
3388
- schema:
3389
- oneOf:
3390
- - type: object
3391
- description: Valid post
3392
- properties:
3393
- valid: { type: boolean }
3394
- message: { type: string, example: "No validation issues found." }
3395
- warnings:
3396
- type: array
3397
- items:
3398
- type: object
3399
- properties:
3400
- platform: { type: string }
3401
- warning: { type: string }
3402
- - type: object
3403
- description: Invalid post
3404
- properties:
3405
- valid: { type: boolean }
3406
- errors:
3407
- type: array
3408
- items:
3409
- type: object
3410
- properties:
3411
- platform: { type: string }
3412
- error: { type: string }
3413
- warnings:
3414
- type: array
3415
- items:
3416
- type: object
3417
- properties:
3418
- platform: { type: string }
3419
- warning: { type: string }
3420
-
3421
- /v1/tools/validate/media:
3422
- post:
3423
- operationId: validateMedia
3424
- tags: [Validate]
3425
- summary: Validate media URL
3426
- description: |
3427
- Check if a media URL is accessible and return metadata (content type, file size) plus per-platform size limit comparisons.
3428
-
3429
- Performs a HEAD request (with GET fallback) to detect content type and size. Rejects private/localhost URLs for SSRF protection.
3430
-
3431
- Platform limits are sourced from each platform's actual upload constraints.
3432
- security:
3433
- - bearerAuth: []
3434
- requestBody:
3435
- required: true
3436
- content:
3437
- application/json:
3438
- schema:
3439
- type: object
3440
- required: [url]
3441
- properties:
3442
- url:
3443
- type: string
3444
- format: uri
3445
- description: Public media URL to validate
3446
- example: "https://example.com/image.jpg"
3447
- responses:
3448
- "200":
3449
- description: Media validation result
3450
- content:
3451
- application/json:
3452
- schema:
3453
- type: object
3454
- properties:
3455
- valid: { type: boolean }
3456
- url: { type: string, format: uri }
3457
- error: { type: string, description: "Error message if valid is false" }
3458
- contentType: { type: string, example: "image/jpeg" }
3459
- size: { type: integer, nullable: true, description: "File size in bytes" }
3460
- sizeFormatted: { type: string, example: "245 KB" }
3461
- type: { type: string, enum: [image, video, unknown] }
3462
- platformLimits:
3463
- type: object
3464
- description: Per-platform size limit comparison (only present when size and type are known)
3465
- additionalProperties:
3466
- type: object
3467
- properties:
3468
- limit: { type: integer, description: "Platform size limit in bytes" }
3469
- limitFormatted: { type: string }
3470
- withinLimit: { type: boolean }
3471
- example:
3472
- instagram: { limit: 8388608, limitFormatted: "8.0 MB", withinLimit: true }
3473
- twitter: { limit: 5242880, limitFormatted: "5.0 MB", withinLimit: true }
3474
- bluesky: { limit: 1000000, limitFormatted: "977 KB", withinLimit: true }
3475
-
3476
- /v1/tools/validate/subreddit:
3477
- get:
3478
- operationId: validateSubreddit
3479
- tags: [Validate]
3480
- summary: Check subreddit existence
3481
- description: |
3482
- Check if a subreddit exists and return basic info (title, subscriber count, NSFW status, post types allowed).
3483
-
3484
- Uses Reddit's public JSON API (no Reddit auth needed). Returns `exists: false` for private, banned, or nonexistent subreddits.
3485
- security:
3486
- - bearerAuth: []
3487
- parameters:
3488
- - name: name
3489
- in: query
3490
- required: true
3491
- description: Subreddit name (with or without "r/" prefix)
3492
- schema:
3493
- type: string
3494
- example: "programming"
3495
- responses:
3496
- "200":
3497
- description: Subreddit lookup result
3498
- content:
3499
- application/json:
3500
- schema:
3501
- oneOf:
3502
- - type: object
3503
- description: Subreddit exists
3504
- properties:
3505
- exists: { type: boolean }
3506
- subreddit:
3507
- type: object
3508
- properties:
3509
- name: { type: string, example: "programming" }
3510
- title: { type: string, example: "programming" }
3511
- description: { type: string, example: "Computer Programming" }
3512
- subscribers: { type: integer, example: 6844284 }
3513
- isNSFW: { type: boolean }
3514
- type: { type: string, enum: [public, private, restricted], example: "public" }
3515
- allowImages: { type: boolean }
3516
- allowVideos: { type: boolean }
3517
- - type: object
3518
- description: Subreddit not found
3519
- properties:
3520
- exists: { type: boolean }
3521
- error: { type: string }
2788
+ # NOTE: Tools & Validate endpoints (/v1/tools/*) removed from docs but still functional for existing customers
3522
2789
 
3523
2790
  # ============================================
3524
2791
  # Analytics
@@ -4852,9 +4119,6 @@ paths:
4852
4119
  file_too_large:
4853
4120
  value: { error: "File too large. Maximum size is 5GB." }
4854
4121
  '401': { $ref: '#/components/responses/Unauthorized' }
4855
- # Video Clips API paths removed - AI Clipping feature temporarily disabled
4856
- # /v1/video-clips, /v1/video-clips-replicate, /v1/video-clips/process,
4857
- # /v1/video-clips/jobs, /v1/video-clips/status/{jobId}, /v1/video-clips/monthly-stats
4858
4122
  /v1/reddit/search:
4859
4123
  get:
4860
4124
  operationId: searchReddit