late-sdk 0.0.103 → 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 -731
  6. data/zernio-sdk-0.0.104.gem +0 -0
  7. metadata +2 -166
  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.103.gem +0 -0
data/openapi.yaml CHANGED
@@ -200,14 +200,6 @@ tags:
200
200
  description: |
201
201
  X/Twitter-specific engagement endpoints for retweeting, bookmarking, and following.
202
202
  Rate limits: 50 requests per 15-min window per user. Retweets share the 300/3hr creation limit with tweet creation.
203
- - name: Tools
204
- description: |
205
- Media download and utility tools. Available to paid plans only.
206
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
207
- All responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.
208
- - name: Validate
209
- description: |
210
- Pre-flight validation endpoints. Check post content, character limits, media URLs, and subreddit existence before publishing.
211
203
  - name: Account Settings
212
204
  description: |
213
205
  Platform-specific account settings: Facebook persistent menu, Instagram ice breakers, and Telegram bot commands.
@@ -2528,79 +2520,6 @@ components:
2528
2520
  format: date-time
2529
2521
  timezone:
2530
2522
  type: string
2531
- # Tools Responses
2532
- DownloadFormat:
2533
- type: object
2534
- properties:
2535
- formatId:
2536
- type: string
2537
- ext:
2538
- type: string
2539
- resolution:
2540
- type: string
2541
- filesize:
2542
- type: integer
2543
- quality:
2544
- type: string
2545
- DownloadResponse:
2546
- type: object
2547
- properties:
2548
- url:
2549
- type: string
2550
- format: uri
2551
- title:
2552
- type: string
2553
- thumbnail:
2554
- type: string
2555
- format: uri
2556
- duration:
2557
- type: integer
2558
- formats:
2559
- type: array
2560
- items:
2561
- $ref: '#/components/schemas/DownloadFormat'
2562
- TranscriptSegment:
2563
- type: object
2564
- properties:
2565
- text:
2566
- type: string
2567
- start:
2568
- type: number
2569
- duration:
2570
- type: number
2571
- TranscriptResponse:
2572
- type: object
2573
- properties:
2574
- transcript:
2575
- type: string
2576
- segments:
2577
- type: array
2578
- items:
2579
- $ref: '#/components/schemas/TranscriptSegment'
2580
- language:
2581
- type: string
2582
- HashtagInfo:
2583
- type: object
2584
- properties:
2585
- hashtag:
2586
- type: string
2587
- status:
2588
- type: string
2589
- enum: [safe, banned, restricted, unknown]
2590
- postCount:
2591
- type: integer
2592
- HashtagCheckResponse:
2593
- type: object
2594
- properties:
2595
- hashtags:
2596
- type: array
2597
- items:
2598
- $ref: '#/components/schemas/HashtagInfo'
2599
- CaptionResponse:
2600
- type: object
2601
- properties:
2602
- caption:
2603
- type: string
2604
2523
  # Users Responses
2605
2524
  User:
2606
2525
  type: object
@@ -2866,656 +2785,7 @@ webhooks:
2866
2785
  security:
2867
2786
  - bearerAuth: []
2868
2787
  paths:
2869
- # ============================================
2870
- # Tools API - Media Download & Utilities
2871
- # ============================================
2872
- /v1/tools/youtube/download:
2873
- get:
2874
- operationId: downloadYouTubeVideo
2875
- tags: [Tools]
2876
- summary: Download YouTube video
2877
- description: |
2878
- Download YouTube videos or audio. Returns available formats or direct download URL.
2879
-
2880
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
2881
- security:
2882
- - bearerAuth: []
2883
- parameters:
2884
- - name: url
2885
- in: query
2886
- required: true
2887
- description: YouTube video URL or video ID
2888
- schema:
2889
- type: string
2890
- example: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
2891
- - name: action
2892
- in: query
2893
- description: "Action to perform: 'download' returns download URL, 'formats' lists available formats"
2894
- schema:
2895
- type: string
2896
- enum: [download, formats]
2897
- default: download
2898
- - name: format
2899
- in: query
2900
- description: Desired format (when action=download)
2901
- schema:
2902
- type: string
2903
- enum: [video, audio]
2904
- default: video
2905
- - name: quality
2906
- in: query
2907
- description: Desired quality (when action=download)
2908
- schema:
2909
- type: string
2910
- enum: [hd, sd]
2911
- default: hd
2912
- - name: formatId
2913
- in: query
2914
- description: Specific format ID from formats list
2915
- schema:
2916
- type: string
2917
- responses:
2918
- "200":
2919
- description: Success
2920
- headers:
2921
- X-RateLimit-Limit:
2922
- schema: { type: string }
2923
- description: Daily rate limit
2924
- X-RateLimit-Remaining:
2925
- schema: { type: string }
2926
- description: Remaining calls today
2927
- X-RateLimit-Reset:
2928
- schema: { type: string }
2929
- description: Unix timestamp when limit resets
2930
- content:
2931
- application/json:
2932
- schema:
2933
- type: object
2934
- properties:
2935
- success: { type: boolean }
2936
- title: { type: string }
2937
- downloadUrl: { type: string, format: uri }
2938
- formats:
2939
- type: array
2940
- items:
2941
- type: object
2942
- properties:
2943
- id: { type: string }
2944
- label: { type: string }
2945
- ext: { type: string }
2946
- type: { type: string }
2947
- height: { type: integer }
2948
- width: { type: integer }
2949
- "401":
2950
- $ref: '#/components/responses/Unauthorized'
2951
- "403":
2952
- description: Tools API not available on free plan
2953
- "429":
2954
- description: Daily rate limit exceeded
2955
-
2956
- /v1/tools/youtube/transcript:
2957
- get:
2958
- operationId: getYouTubeTranscript
2959
- tags: [Tools]
2960
- summary: Get YouTube transcript
2961
- description: |
2962
- Extract transcript/captions from a YouTube video.
2963
-
2964
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
2965
- security:
2966
- - bearerAuth: []
2967
- parameters:
2968
- - name: url
2969
- in: query
2970
- required: true
2971
- description: YouTube video URL or video ID
2972
- schema:
2973
- type: string
2974
- - name: lang
2975
- in: query
2976
- description: Language code for transcript
2977
- schema:
2978
- type: string
2979
- default: en
2980
- responses:
2981
- "200":
2982
- description: Success
2983
- content:
2984
- application/json:
2985
- schema:
2986
- type: object
2987
- properties:
2988
- success: { type: boolean }
2989
- videoId: { type: string }
2990
- language: { type: string }
2991
- fullText: { type: string }
2992
- segments:
2993
- type: array
2994
- items:
2995
- type: object
2996
- properties:
2997
- text: { type: string }
2998
- start: { type: number }
2999
- duration: { type: number }
3000
- "404":
3001
- description: No transcript available
3002
- "503":
3003
- description: Transcript service temporarily unavailable
3004
-
3005
- /v1/tools/instagram/download:
3006
- get:
3007
- operationId: downloadInstagramMedia
3008
- tags: [Tools]
3009
- summary: Download Instagram media
3010
- description: |
3011
- Download Instagram reels, posts, or photos.
3012
-
3013
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3014
- security:
3015
- - bearerAuth: []
3016
- parameters:
3017
- - name: url
3018
- in: query
3019
- required: true
3020
- description: Instagram reel or post URL
3021
- schema:
3022
- type: string
3023
- example: "https://www.instagram.com/reel/ABC123/"
3024
- responses:
3025
- "200":
3026
- description: Success
3027
- content:
3028
- application/json:
3029
- schema:
3030
- type: object
3031
- properties:
3032
- success: { type: boolean }
3033
- title: { type: string }
3034
- downloadUrl: { type: string, format: uri }
3035
-
3036
- /v1/tools/instagram/hashtag-checker:
3037
- post:
3038
- operationId: checkInstagramHashtags
3039
- tags: [Tools]
3040
- summary: Check IG hashtag bans
3041
- description: |
3042
- Check if Instagram hashtags are banned, restricted, or safe to use.
3043
-
3044
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3045
- security:
3046
- - bearerAuth: []
3047
- requestBody:
3048
- required: true
3049
- content:
3050
- application/json:
3051
- schema:
3052
- type: object
3053
- required: [hashtags]
3054
- properties:
3055
- hashtags:
3056
- type: array
3057
- maxItems: 20
3058
- items:
3059
- type: string
3060
- example: ["travel", "followforfollow", "fitness"]
3061
- responses:
3062
- "200":
3063
- description: Success
3064
- content:
3065
- application/json:
3066
- schema:
3067
- type: object
3068
- properties:
3069
- success: { type: boolean }
3070
- results:
3071
- type: array
3072
- items:
3073
- type: object
3074
- properties:
3075
- hashtag: { type: string }
3076
- status:
3077
- type: string
3078
- enum: [banned, restricted, safe, unknown]
3079
- reason: { type: string }
3080
- confidence: { type: number }
3081
- summary:
3082
- type: object
3083
- properties:
3084
- banned: { type: integer }
3085
- restricted: { type: integer }
3086
- safe: { type: integer }
3087
-
3088
- /v1/tools/tiktok/download:
3089
- get:
3090
- operationId: downloadTikTokVideo
3091
- tags: [Tools]
3092
- summary: Download TikTok video
3093
- description: |
3094
- Download TikTok videos with or without watermark.
3095
-
3096
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3097
- security:
3098
- - bearerAuth: []
3099
- parameters:
3100
- - name: url
3101
- in: query
3102
- required: true
3103
- description: TikTok video URL or ID
3104
- schema:
3105
- type: string
3106
- - name: action
3107
- in: query
3108
- description: "'formats' to list available formats"
3109
- schema:
3110
- type: string
3111
- enum: [download, formats]
3112
- default: download
3113
- - name: formatId
3114
- in: query
3115
- description: Specific format ID (0 = no watermark, etc.)
3116
- schema:
3117
- type: string
3118
- responses:
3119
- "200":
3120
- description: Success
3121
- content:
3122
- application/json:
3123
- schema:
3124
- type: object
3125
- properties:
3126
- success: { type: boolean }
3127
- title: { type: string }
3128
- downloadUrl: { type: string, format: uri }
3129
- formats:
3130
- type: array
3131
- items:
3132
- type: object
3133
- properties:
3134
- id: { type: string }
3135
- label: { type: string }
3136
- ext: { type: string }
3137
-
3138
- /v1/tools/twitter/download:
3139
- get:
3140
- operationId: downloadTwitterMedia
3141
- tags: [Tools]
3142
- summary: Download Twitter/X media
3143
- description: |
3144
- Download videos from Twitter/X posts.
3145
-
3146
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3147
- security:
3148
- - bearerAuth: []
3149
- parameters:
3150
- - name: url
3151
- in: query
3152
- required: true
3153
- description: Twitter/X post URL
3154
- schema:
3155
- type: string
3156
- example: "https://x.com/user/status/123456789"
3157
- - name: action
3158
- in: query
3159
- schema:
3160
- type: string
3161
- enum: [download, formats]
3162
- default: download
3163
- - name: formatId
3164
- in: query
3165
- schema:
3166
- type: string
3167
- responses:
3168
- "200":
3169
- description: Success
3170
- content:
3171
- application/json:
3172
- schema:
3173
- type: object
3174
- properties:
3175
- success: { type: boolean }
3176
- title: { type: string }
3177
- downloadUrl: { type: string, format: uri }
3178
-
3179
- /v1/tools/facebook/download:
3180
- get:
3181
- operationId: downloadFacebookVideo
3182
- tags: [Tools]
3183
- summary: Download Facebook video
3184
- description: |
3185
- Download videos and reels from Facebook.
3186
-
3187
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3188
- security:
3189
- - bearerAuth: []
3190
- parameters:
3191
- - name: url
3192
- in: query
3193
- required: true
3194
- description: Facebook video or reel URL
3195
- schema:
3196
- type: string
3197
- responses:
3198
- "200":
3199
- description: Success
3200
- content:
3201
- application/json:
3202
- schema:
3203
- type: object
3204
- properties:
3205
- success: { type: boolean }
3206
- title: { type: string }
3207
- downloadUrl: { type: string, format: uri }
3208
- thumbnail: { type: string, format: uri }
3209
-
3210
- /v1/tools/linkedin/download:
3211
- get:
3212
- operationId: downloadLinkedInVideo
3213
- tags: [Tools]
3214
- summary: Download LinkedIn video
3215
- description: |
3216
- Download videos from LinkedIn posts.
3217
-
3218
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3219
- security:
3220
- - bearerAuth: []
3221
- parameters:
3222
- - name: url
3223
- in: query
3224
- required: true
3225
- description: LinkedIn post URL
3226
- schema:
3227
- type: string
3228
- responses:
3229
- "200":
3230
- description: Success
3231
- content:
3232
- application/json:
3233
- schema:
3234
- type: object
3235
- properties:
3236
- success: { type: boolean }
3237
- title: { type: string }
3238
- downloadUrl: { type: string, format: uri }
3239
-
3240
- /v1/tools/bluesky/download:
3241
- get:
3242
- operationId: downloadBlueskyMedia
3243
- tags: [Tools]
3244
- summary: Download Bluesky media
3245
- description: |
3246
- Download videos from Bluesky posts.
3247
-
3248
- Rate limits: Build (50/day), Accelerate (500/day), Unlimited (unlimited).
3249
- security:
3250
- - bearerAuth: []
3251
- parameters:
3252
- - name: url
3253
- in: query
3254
- required: true
3255
- description: Bluesky post URL
3256
- schema:
3257
- type: string
3258
- example: "https://bsky.app/profile/user.bsky.social/post/abc123"
3259
- responses:
3260
- "200":
3261
- description: Success
3262
- content:
3263
- application/json:
3264
- schema:
3265
- type: object
3266
- properties:
3267
- success: { type: boolean }
3268
- title: { type: string }
3269
- text: { type: string }
3270
- downloadUrl: { type: string, format: uri }
3271
- thumbnail: { type: string, format: uri }
3272
-
3273
- # ============================================
3274
- # Validate
3275
- # ============================================
3276
- /v1/tools/validate/post-length:
3277
- post:
3278
- operationId: validatePostLength
3279
- tags: [Validate]
3280
- summary: Validate post character count
3281
- description: |
3282
- Check weighted character count per platform and whether the text is within each platform's limit.
3283
-
3284
- Twitter/X uses weighted counting (URLs = 23 chars via t.co, emojis = 2 chars). All other platforms use plain character length.
3285
-
3286
- Returns counts and limits for all 15 supported platform variants.
3287
- security:
3288
- - bearerAuth: []
3289
- requestBody:
3290
- required: true
3291
- content:
3292
- application/json:
3293
- schema:
3294
- type: object
3295
- required: [text]
3296
- properties:
3297
- text:
3298
- type: string
3299
- description: The post text to check
3300
- example: "Check out https://zernio.com for scheduling posts!"
3301
- responses:
3302
- "200":
3303
- description: Character counts per platform
3304
- content:
3305
- application/json:
3306
- schema:
3307
- type: object
3308
- properties:
3309
- text: { type: string }
3310
- platforms:
3311
- type: object
3312
- additionalProperties:
3313
- type: object
3314
- properties:
3315
- count: { type: integer, description: "Character count for this platform" }
3316
- limit: { type: integer, description: "Maximum allowed characters" }
3317
- valid: { type: boolean, description: "Whether the text is within the limit" }
3318
- example:
3319
- twitter: { count: 51, limit: 280, valid: true }
3320
- twitterPremium: { count: 51, limit: 25000, valid: true }
3321
- instagram: { count: 51, limit: 2200, valid: true }
3322
- bluesky: { count: 51, limit: 300, valid: true }
3323
- snapchat: { count: 51, limit: 160, valid: true }
3324
-
3325
- /v1/tools/validate/post:
3326
- post:
3327
- operationId: validatePost
3328
- tags: [Validate]
3329
- summary: Validate post content
3330
- description: |
3331
- 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.
3332
-
3333
- Accepts the same body as `POST /v1/posts`. Does NOT validate accounts, process media, or track usage. This is content-only validation.
3334
-
3335
- Returns errors for failures and warnings for near-limit content (>90% of character limit).
3336
- security:
3337
- - bearerAuth: []
3338
- requestBody:
3339
- required: true
3340
- content:
3341
- application/json:
3342
- schema:
3343
- type: object
3344
- required: [platforms]
3345
- properties:
3346
- content:
3347
- type: string
3348
- description: Post text content
3349
- example: "Check out this video!"
3350
- platforms:
3351
- type: array
3352
- description: Target platforms (same format as POST /v1/posts)
3353
- items:
3354
- type: object
3355
- required: [platform]
3356
- properties:
3357
- platform:
3358
- type: string
3359
- enum: [twitter, instagram, tiktok, youtube, facebook, linkedin, bluesky, threads, reddit, pinterest, telegram, snapchat, googlebusiness]
3360
- customContent: { type: string }
3361
- platformSpecificData: { type: object }
3362
- customMedia:
3363
- type: array
3364
- items:
3365
- type: object
3366
- properties:
3367
- url: { type: string }
3368
- type: { type: string, enum: [image, video] }
3369
- example:
3370
- - platform: youtube
3371
- - platform: twitter
3372
- mediaItems:
3373
- type: array
3374
- description: Root media items shared across platforms
3375
- items:
3376
- type: object
3377
- properties:
3378
- url: { type: string, format: uri }
3379
- type: { type: string, enum: [image, video] }
3380
- responses:
3381
- "200":
3382
- description: Validation result
3383
- content:
3384
- application/json:
3385
- schema:
3386
- oneOf:
3387
- - type: object
3388
- description: Valid post
3389
- properties:
3390
- valid: { type: boolean }
3391
- message: { type: string, example: "No validation issues found." }
3392
- warnings:
3393
- type: array
3394
- items:
3395
- type: object
3396
- properties:
3397
- platform: { type: string }
3398
- warning: { type: string }
3399
- - type: object
3400
- description: Invalid post
3401
- properties:
3402
- valid: { type: boolean }
3403
- errors:
3404
- type: array
3405
- items:
3406
- type: object
3407
- properties:
3408
- platform: { type: string }
3409
- error: { type: string }
3410
- warnings:
3411
- type: array
3412
- items:
3413
- type: object
3414
- properties:
3415
- platform: { type: string }
3416
- warning: { type: string }
3417
-
3418
- /v1/tools/validate/media:
3419
- post:
3420
- operationId: validateMedia
3421
- tags: [Validate]
3422
- summary: Validate media URL
3423
- description: |
3424
- Check if a media URL is accessible and return metadata (content type, file size) plus per-platform size limit comparisons.
3425
-
3426
- Performs a HEAD request (with GET fallback) to detect content type and size. Rejects private/localhost URLs for SSRF protection.
3427
-
3428
- Platform limits are sourced from each platform's actual upload constraints.
3429
- security:
3430
- - bearerAuth: []
3431
- requestBody:
3432
- required: true
3433
- content:
3434
- application/json:
3435
- schema:
3436
- type: object
3437
- required: [url]
3438
- properties:
3439
- url:
3440
- type: string
3441
- format: uri
3442
- description: Public media URL to validate
3443
- example: "https://example.com/image.jpg"
3444
- responses:
3445
- "200":
3446
- description: Media validation result
3447
- content:
3448
- application/json:
3449
- schema:
3450
- type: object
3451
- properties:
3452
- valid: { type: boolean }
3453
- url: { type: string, format: uri }
3454
- error: { type: string, description: "Error message if valid is false" }
3455
- contentType: { type: string, example: "image/jpeg" }
3456
- size: { type: integer, nullable: true, description: "File size in bytes" }
3457
- sizeFormatted: { type: string, example: "245 KB" }
3458
- type: { type: string, enum: [image, video, unknown] }
3459
- platformLimits:
3460
- type: object
3461
- description: Per-platform size limit comparison (only present when size and type are known)
3462
- additionalProperties:
3463
- type: object
3464
- properties:
3465
- limit: { type: integer, description: "Platform size limit in bytes" }
3466
- limitFormatted: { type: string }
3467
- withinLimit: { type: boolean }
3468
- example:
3469
- instagram: { limit: 8388608, limitFormatted: "8.0 MB", withinLimit: true }
3470
- twitter: { limit: 5242880, limitFormatted: "5.0 MB", withinLimit: true }
3471
- bluesky: { limit: 1000000, limitFormatted: "977 KB", withinLimit: true }
3472
-
3473
- /v1/tools/validate/subreddit:
3474
- get:
3475
- operationId: validateSubreddit
3476
- tags: [Validate]
3477
- summary: Check subreddit existence
3478
- description: |
3479
- Check if a subreddit exists and return basic info (title, subscriber count, NSFW status, post types allowed).
3480
-
3481
- Uses Reddit's public JSON API (no Reddit auth needed). Returns `exists: false` for private, banned, or nonexistent subreddits.
3482
- security:
3483
- - bearerAuth: []
3484
- parameters:
3485
- - name: name
3486
- in: query
3487
- required: true
3488
- description: Subreddit name (with or without "r/" prefix)
3489
- schema:
3490
- type: string
3491
- example: "programming"
3492
- responses:
3493
- "200":
3494
- description: Subreddit lookup result
3495
- content:
3496
- application/json:
3497
- schema:
3498
- oneOf:
3499
- - type: object
3500
- description: Subreddit exists
3501
- properties:
3502
- exists: { type: boolean }
3503
- subreddit:
3504
- type: object
3505
- properties:
3506
- name: { type: string, example: "programming" }
3507
- title: { type: string, example: "programming" }
3508
- description: { type: string, example: "Computer Programming" }
3509
- subscribers: { type: integer, example: 6844284 }
3510
- isNSFW: { type: boolean }
3511
- type: { type: string, enum: [public, private, restricted], example: "public" }
3512
- allowImages: { type: boolean }
3513
- allowVideos: { type: boolean }
3514
- - type: object
3515
- description: Subreddit not found
3516
- properties:
3517
- exists: { type: boolean }
3518
- error: { type: string }
2788
+ # NOTE: Tools & Validate endpoints (/v1/tools/*) removed from docs but still functional for existing customers
3519
2789
 
3520
2790
  # ============================================
3521
2791
  # Analytics