late-sdk 0.0.910 → 0.0.911

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.
@@ -0,0 +1,219 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ class DownloadTikTokVideo200ResponseFormatsInner < ApiModelBase
18
+ attr_accessor :id
19
+
20
+ attr_accessor :label
21
+
22
+ attr_accessor :ext
23
+
24
+ attr_accessor :type
25
+
26
+ attr_accessor :height
27
+
28
+ attr_accessor :width
29
+
30
+ attr_accessor :fps
31
+
32
+ attr_accessor :has_audio
33
+
34
+ attr_accessor :has_video
35
+
36
+ # Attribute mapping from ruby-style variable name to JSON key.
37
+ def self.attribute_map
38
+ {
39
+ :'id' => :'id',
40
+ :'label' => :'label',
41
+ :'ext' => :'ext',
42
+ :'type' => :'type',
43
+ :'height' => :'height',
44
+ :'width' => :'width',
45
+ :'fps' => :'fps',
46
+ :'has_audio' => :'hasAudio',
47
+ :'has_video' => :'hasVideo'
48
+ }
49
+ end
50
+
51
+ # Returns attribute mapping this model knows about
52
+ def self.acceptable_attribute_map
53
+ attribute_map
54
+ end
55
+
56
+ # Returns all the JSON keys this model knows about
57
+ def self.acceptable_attributes
58
+ acceptable_attribute_map.values
59
+ end
60
+
61
+ # Attribute type mapping.
62
+ def self.openapi_types
63
+ {
64
+ :'id' => :'String',
65
+ :'label' => :'String',
66
+ :'ext' => :'String',
67
+ :'type' => :'String',
68
+ :'height' => :'Float',
69
+ :'width' => :'Float',
70
+ :'fps' => :'Float',
71
+ :'has_audio' => :'Boolean',
72
+ :'has_video' => :'Boolean'
73
+ }
74
+ end
75
+
76
+ # List of attributes with nullable: true
77
+ def self.openapi_nullable
78
+ Set.new([
79
+ ])
80
+ end
81
+
82
+ # Initializes the object
83
+ # @param [Hash] attributes Model attributes in the form of hash
84
+ def initialize(attributes = {})
85
+ if (!attributes.is_a?(Hash))
86
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::DownloadTikTokVideo200ResponseFormatsInner` initialize method"
87
+ end
88
+
89
+ # check to see if the attribute exists and convert string to symbol for hash key
90
+ acceptable_attribute_map = self.class.acceptable_attribute_map
91
+ attributes = attributes.each_with_object({}) { |(k, v), h|
92
+ if (!acceptable_attribute_map.key?(k.to_sym))
93
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::DownloadTikTokVideo200ResponseFormatsInner`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
94
+ end
95
+ h[k.to_sym] = v
96
+ }
97
+
98
+ if attributes.key?(:'id')
99
+ self.id = attributes[:'id']
100
+ end
101
+
102
+ if attributes.key?(:'label')
103
+ self.label = attributes[:'label']
104
+ end
105
+
106
+ if attributes.key?(:'ext')
107
+ self.ext = attributes[:'ext']
108
+ end
109
+
110
+ if attributes.key?(:'type')
111
+ self.type = attributes[:'type']
112
+ end
113
+
114
+ if attributes.key?(:'height')
115
+ self.height = attributes[:'height']
116
+ end
117
+
118
+ if attributes.key?(:'width')
119
+ self.width = attributes[:'width']
120
+ end
121
+
122
+ if attributes.key?(:'fps')
123
+ self.fps = attributes[:'fps']
124
+ end
125
+
126
+ if attributes.key?(:'has_audio')
127
+ self.has_audio = attributes[:'has_audio']
128
+ end
129
+
130
+ if attributes.key?(:'has_video')
131
+ self.has_video = attributes[:'has_video']
132
+ end
133
+ end
134
+
135
+ # Show invalid properties with the reasons. Usually used together with valid?
136
+ # @return Array for valid properties with the reasons
137
+ def list_invalid_properties
138
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
139
+ invalid_properties = Array.new
140
+ invalid_properties
141
+ end
142
+
143
+ # Check to see if the all the properties in the model are valid
144
+ # @return true if the model is valid
145
+ def valid?
146
+ warn '[DEPRECATED] the `valid?` method is obsolete'
147
+ true
148
+ end
149
+
150
+ # Checks equality by comparing each attribute.
151
+ # @param [Object] Object to be compared
152
+ def ==(o)
153
+ return true if self.equal?(o)
154
+ self.class == o.class &&
155
+ id == o.id &&
156
+ label == o.label &&
157
+ ext == o.ext &&
158
+ type == o.type &&
159
+ height == o.height &&
160
+ width == o.width &&
161
+ fps == o.fps &&
162
+ has_audio == o.has_audio &&
163
+ has_video == o.has_video
164
+ end
165
+
166
+ # @see the `==` method
167
+ # @param [Object] Object to be compared
168
+ def eql?(o)
169
+ self == o
170
+ end
171
+
172
+ # Calculates hash code according to all attributes.
173
+ # @return [Integer] Hash code
174
+ def hash
175
+ [id, label, ext, type, height, width, fps, has_audio, has_video].hash
176
+ end
177
+
178
+ # Builds the object from hash
179
+ # @param [Hash] attributes Model attributes in the form of hash
180
+ # @return [Object] Returns the model itself
181
+ def self.build_from_hash(attributes)
182
+ return nil unless attributes.is_a?(Hash)
183
+ attributes = attributes.transform_keys(&:to_sym)
184
+ transformed_hash = {}
185
+ openapi_types.each_pair do |key, type|
186
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
187
+ transformed_hash["#{key}"] = nil
188
+ elsif type =~ /\AArray<(.*)>/i
189
+ # check to ensure the input is an array given that the attribute
190
+ # is documented as an array but the input is not
191
+ if attributes[attribute_map[key]].is_a?(Array)
192
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
193
+ end
194
+ elsif !attributes[attribute_map[key]].nil?
195
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
196
+ end
197
+ end
198
+ new(transformed_hash)
199
+ end
200
+
201
+ # Returns the object in the form of hash
202
+ # @return [Hash] Returns the object in the form of hash
203
+ def to_hash
204
+ hash = {}
205
+ self.class.attribute_map.each_pair do |attr, param|
206
+ value = self.send(attr)
207
+ if value.nil?
208
+ is_nullable = self.class.openapi_nullable.include?(attr)
209
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
210
+ end
211
+
212
+ hash[param] = _to_hash(value)
213
+ end
214
+ hash
215
+ end
216
+
217
+ end
218
+
219
+ end
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.910'
14
+ VERSION = '0.0.911'
15
15
  end
data/lib/zernio-sdk.rb CHANGED
@@ -498,6 +498,8 @@ require 'zernio-sdk/models/discord_role'
498
498
  require 'zernio-sdk/models/discord_scheduled_event'
499
499
  require 'zernio-sdk/models/discord_scheduled_event_entity_metadata'
500
500
  require 'zernio-sdk/models/dm_button'
501
+ require 'zernio-sdk/models/download_tik_tok_video200_response'
502
+ require 'zernio-sdk/models/download_tik_tok_video200_response_formats_inner'
501
503
  require 'zernio-sdk/models/duplicate_ad200_response'
502
504
  require 'zernio-sdk/models/duplicate_ad_campaign200_response'
503
505
  require 'zernio-sdk/models/duplicate_ad_campaign_request'
@@ -2085,6 +2087,7 @@ require 'zernio-sdk/api/reviews_api'
2085
2087
  require 'zernio-sdk/api/sms_api'
2086
2088
  require 'zernio-sdk/api/sequences_api'
2087
2089
  require 'zernio-sdk/api/slack_api'
2090
+ require 'zernio-sdk/api/tools_api'
2088
2091
  require 'zernio-sdk/api/tracking_tags_api'
2089
2092
  require 'zernio-sdk/api/twitter_engagement_api'
2090
2093
  require 'zernio-sdk/api/usage_api'
data/openapi.yaml CHANGED
@@ -217,6 +217,8 @@ servers:
217
217
  - url: http://localhost:3000/api
218
218
  description: Local
219
219
  tags:
220
+ - name: Tools
221
+ description: "Media tools for authenticated API consumers."
220
222
  - name: Posts
221
223
  description: |
222
224
  Create, schedule, list, update, and delete posts across all connected accounts.
@@ -607,6 +609,28 @@ components:
607
609
  type: invalid_request_error
608
610
  code: ads_connection_required
609
611
  param: accountId
612
+ TemporarilyUnavailable:
613
+ description: 'An upstream service or database is temporarily unavailable. Retry after the indicated delay. A timed-out write may have completed upstream; check its outcome before resubmitting.'
614
+ headers:
615
+ Retry-After:
616
+ schema: { type: integer, example: 5 }
617
+ description: 'Minimum delay in seconds before retrying.'
618
+ content:
619
+ application/json:
620
+ schema: { $ref: '#/components/schemas/ErrorResponse' }
621
+ example:
622
+ error: 'Temporary connection issue while reaching an upstream service. Please retry the request.'
623
+ type: api_error
624
+ code: temporarily_unavailable
625
+ UpstreamFailure:
626
+ description: 'The platform returned a server error.'
627
+ content:
628
+ application/json:
629
+ schema: { $ref: '#/components/schemas/ErrorResponse' }
630
+ example:
631
+ error: 'The platform could not complete the request.'
632
+ type: platform_error
633
+ code: platform_api_error
610
634
  IdempotencyKeyInFlight:
611
635
  description: Same Idempotency-Key still processing; retry after a short backoff
612
636
  IdempotencyKeyReused:
@@ -12599,6 +12623,8 @@ paths:
12599
12623
  application/json:
12600
12624
  schema:
12601
12625
  $ref: '#/components/schemas/YouTubeScopeMissingResponse'
12626
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
12627
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
12602
12628
 
12603
12629
  /v1/analytics/linkedin/org-aggregate-analytics:
12604
12630
  get:
@@ -13831,6 +13857,8 @@ paths:
13831
13857
  hasAnalyticsScope: { type: boolean, example: false }
13832
13858
  requiresReauthorization: { type: boolean, example: true }
13833
13859
  reauthorizeUrl: { type: string }
13860
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
13861
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
13834
13862
 
13835
13863
  /v1/analytics/daily-metrics:
13836
13864
  get:
@@ -14447,6 +14475,8 @@ paths:
14447
14475
  type: object
14448
14476
  properties:
14449
14477
  error: { type: string, example: "Access denied to this account" }
14478
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
14479
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
14450
14480
 
14451
14481
  /v1/analytics/googlebusiness/search-keywords:
14452
14482
  get:
@@ -14541,6 +14571,9 @@ paths:
14541
14571
  properties:
14542
14572
  error: { type: string, example: "Access denied to this account" }
14543
14573
 
14574
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
14575
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
14576
+
14544
14577
  # ─── Inbox analytics ───────────────────────────────────────────────────
14545
14578
  # Same `[Analytics]` tag as the posting endpoints above so the rendered
14546
14579
  # docs keep posting + inbox analytics centralized in one group. Every
@@ -16831,6 +16864,11 @@ paths:
16831
16864
  application/json:
16832
16865
  schema:
16833
16866
  $ref: '#/components/schemas/ErrorResponse'
16867
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
16868
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
16869
+ '401': { description: 'The platform authorization has expired. Reconnect the account.' }
16870
+ '403': { description: 'The account is inactive or the platform denied access.' }
16871
+
16834
16872
  /v1/posts/{postId}:
16835
16873
  get:
16836
16874
  x-resource-group: "publishing"
@@ -18042,6 +18080,8 @@ paths:
18042
18080
  hasAnalyticsAccess: false
18043
18081
  '400': { $ref: '#/components/responses/BadRequest' }
18044
18082
  '401': { $ref: '#/components/responses/Unauthorized' }
18083
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
18084
+
18045
18085
  /v1/accounts/follower-stats:
18046
18086
  get:
18047
18087
  x-resource-group: "analytics"
@@ -18749,6 +18789,9 @@ paths:
18749
18789
  '401': { $ref: '#/components/responses/Unauthorized' }
18750
18790
  '403': { description: 'X analytics capability not enabled for this account (code X_ANALYTICS_NOT_ENABLED)' }
18751
18791
  '404': { $ref: '#/components/responses/NotFound' }
18792
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
18793
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
18794
+
18752
18795
  /v1/accounts/{accountId}/follow-status/{userId}:
18753
18796
  get:
18754
18797
  operationId: getInstagramFollowStatus
@@ -20552,6 +20595,8 @@ paths:
20552
20595
  content:
20553
20596
  application/json:
20554
20597
  schema: { $ref: '#/components/schemas/ErrorResponse' }
20598
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
20599
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
20555
20600
 
20556
20601
  /v1/accounts/{accountId}/gmb-verifications:
20557
20602
  get:
@@ -24518,6 +24563,8 @@ paths:
24518
24563
  error: "Post not found. The URN may be invalid or the post may have been deleted."
24519
24564
  code: "post_not_found"
24520
24565
  postUrn: "urn:li:share:123"
24566
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
24567
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
24521
24568
 
24522
24569
  /v1/accounts/{accountId}/linkedin-post-reactions:
24523
24570
  get:
@@ -29329,6 +29376,9 @@ paths:
29329
29376
  '401': { $ref: '#/components/responses/Unauthorized' }
29330
29377
  '403':
29331
29378
  description: Inbox addon required
29379
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
29380
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
29381
+
29332
29382
  post:
29333
29383
  x-resource-group: "messages"
29334
29384
  operationId: sendInboxMessage
@@ -30033,6 +30083,8 @@ paths:
30033
30083
  schema: { $ref: '#/components/schemas/ErrorResponse' }
30034
30084
  '409': { $ref: '#/components/responses/IdempotencyKeyInFlight' }
30035
30085
  '422': { $ref: '#/components/responses/IdempotencyKeyReused' }
30086
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
30087
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
30036
30088
 
30037
30089
  /v1/whatsapp/media/{mediaId}:
30038
30090
  get:
@@ -42397,6 +42449,8 @@ paths:
42397
42449
  createdAt: { type: string, format: date-time }
42398
42450
  '400': { description: Invalid request }
42399
42451
  '401': { $ref: '#/components/responses/Unauthorized' }
42452
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
42453
+
42400
42454
  post:
42401
42455
  x-resource-group: "messages"
42402
42456
  operationId: createCommentAutomation
@@ -42451,7 +42505,7 @@ paths:
42451
42505
  accountId: { type: string, description: Instagram or Facebook account ID }
42452
42506
  trigger: { type: string, enum: [comment, story_reply], default: comment, description: "What fires the automation. 'comment' (keyword comment on a post) or 'story_reply' (keyword reply to an Instagram story). For 'story_reply', platformPostId is the story media id (omit for any story)." }
42453
42507
  platformPostId: { type: string, description: "Platform media/post ID (or story media id when trigger=story_reply). Omit for an account-wide (any-post / any-story) automation." }
42454
- postId: { type: string, description: "Zernio post ID. Optional and never required. Use it INSTEAD of platformPostId to bind a per-post automation to a not-yet-published Zernio post: the automation stays pending and arms itself when that post publishes. For a post already live on the platform, pass platformPostId alone and omit this." }
42508
+ postId: { type: string, pattern: "^[a-fA-F0-9]{24}$", description: "Zernio post ID (24 hexadecimal characters); platform IDs return 400. Optional and never required. Use it INSTEAD of platformPostId to bind a per-post automation to a not-yet-published Zernio post: the automation stays pending and arms itself when that post publishes. For a post already live on the platform, pass platformPostId alone and omit this." }
42455
42509
  postTitle: { type: string, description: Post content snippet for display }
42456
42510
  name: { type: string, description: Automation label }
42457
42511
  keywords:
@@ -42532,6 +42586,7 @@ paths:
42532
42586
  '400': { description: Validation error }
42533
42587
  '401': { $ref: '#/components/responses/Unauthorized' }
42534
42588
  '409': { description: "Active per-post automation already exists for this platformPostId. Does not apply to account-wide automations." }
42589
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
42535
42590
 
42536
42591
  /v1/comment-automations/{automationId}:
42537
42592
  get:
@@ -51798,6 +51853,7 @@ paths:
51798
51853
  missing poster also carries `creativeIndex` and `videoUrl` to
51799
51854
  identify the entry. An upstream 4xx status is forwarded instead
51800
51855
  of 502.
51856
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
51801
51857
 
51802
51858
  /v1/ads/leads:
51803
51859
  get:
@@ -51821,7 +51877,7 @@ paths:
51821
51877
  - { name: accountId, in: query, schema: { type: string }, description: Filter to a single connected account. LinkedIn ads accounts switch to the live fetch. }
51822
51878
  - { name: adAccountId, in: query, schema: { type: string }, description: "LinkedIn only: the LinkedIn ad account id whose responses to read (owner-scoped finder)." }
51823
51879
  - { name: limit, in: query, schema: { type: integer, minimum: 1, maximum: 100, default: 25 } }
51824
- - { name: since, in: query, schema: { type: integer }, description: Unix seconds; only leads created at/after this timestamp. }
51880
+ - { name: since, in: query, schema: { type: integer, minimum: 1, maximum: 253402300799, example: 1757404800 }, description: "Unix seconds; only leads created at/after this timestamp. Millisecond timestamps return 400 with instructions to divide by 1000." }
51825
51881
  - { name: cursor, in: query, schema: { type: string }, description: "Keyset cursor from a previous response's pagination.cursor (Meta: AdLead id; LinkedIn: numeric start offset)." }
51826
51882
  responses:
51827
51883
  '200':
@@ -51857,6 +51913,8 @@ paths:
51857
51913
  '400': { $ref: '#/components/responses/BadRequest' }
51858
51914
  '401': { $ref: '#/components/responses/Unauthorized' }
51859
51915
  '403': { description: Ads add-on required. }
51916
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
51917
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
51860
51918
 
51861
51919
  /v1/ads/lead-forms:
51862
51920
  get:
@@ -57626,3 +57684,67 @@ paths:
57626
57684
  "409": *a5
57627
57685
  "422":
57628
57686
  description: 'The advertiser Instagram Business Account could not be resolved.'
57687
+ /v1/tools/tiktok/download:
57688
+ get:
57689
+ operationId: downloadTikTokVideo
57690
+ tags: [Tools]
57691
+ x-platforms: ["tiktok"]
57692
+ summary: Download a TikTok video
57693
+ description: 'Get a download URL or list available formats for a TikTok video. Requires Tools API access and uses the Tools API rate limit. Provider gateway failures and provider-side access blocks return 503; an unavailable video returns 404.'
57694
+ parameters:
57695
+ - name: url
57696
+ in: query
57697
+ required: true
57698
+ schema: { type: string }
57699
+ description: 'TikTok video URL or numeric video ID.'
57700
+ example: 'https://www.tiktok.com/@example/video/7412345678901234567'
57701
+ - name: action
57702
+ in: query
57703
+ schema: { type: string, enum: [download, formats], default: download }
57704
+ description: 'Return a download URL or the available formats.'
57705
+ - name: formatId
57706
+ in: query
57707
+ schema: { type: string }
57708
+ description: 'Format ID from the formats response. Omit to select the first available format.'
57709
+ responses:
57710
+ '200':
57711
+ description: 'Download URL or available formats.'
57712
+ content:
57713
+ application/json:
57714
+ schema:
57715
+ type: object
57716
+ required: [success, title]
57717
+ properties:
57718
+ success: { type: boolean }
57719
+ title: { type: string }
57720
+ format: { type: string, description: 'Selected format label for action=download.' }
57721
+ downloadUrl: { type: string, description: 'Media download URL for action=download.' }
57722
+ duration: { type: number, description: 'Duration in seconds for action=formats.' }
57723
+ cover: { type: string, description: 'Thumbnail URL for action=formats.' }
57724
+ formats:
57725
+ type: array
57726
+ description: 'Available formats for action=formats.'
57727
+ items:
57728
+ type: object
57729
+ properties:
57730
+ id: { type: string }
57731
+ label: { type: string }
57732
+ ext: { type: string }
57733
+ type: { type: string }
57734
+ height: { type: number }
57735
+ width: { type: number }
57736
+ fps: { type: number }
57737
+ hasAudio: { type: boolean }
57738
+ hasVideo: { type: boolean }
57739
+ example:
57740
+ success: true
57741
+ title: 'TikTok by @example'
57742
+ format: 'MP4 • No watermark'
57743
+ downloadUrl: 'https://example.com/video.mp4'
57744
+ '400': { description: 'Missing or invalid url, action, or formatId.' }
57745
+ '401': { $ref: '#/components/responses/Unauthorized' }
57746
+ '403': { description: 'Tools API access is required.' }
57747
+ '404': { description: 'The video or a downloadable format was not found.' }
57748
+ '429': { $ref: '#/components/responses/RateLimited' }
57749
+ '502': { $ref: '#/components/responses/UpstreamFailure' }
57750
+ '503': { $ref: '#/components/responses/TemporarilyUnavailable' }
@@ -121,7 +121,7 @@ describe 'LeadGenApi' do
121
121
  # @option opts [String] :account_id Filter to a single connected account. LinkedIn ads accounts switch to the live fetch.
122
122
  # @option opts [String] :ad_account_id LinkedIn only: the LinkedIn ad account id whose responses to read (owner-scoped finder).
123
123
  # @option opts [Integer] :limit
124
- # @option opts [Integer] :since Unix seconds; only leads created at/after this timestamp.
124
+ # @option opts [Integer] :since Unix seconds; only leads created at/after this timestamp. Millisecond timestamps return 400 with instructions to divide by 1000.
125
125
  # @option opts [String] :cursor Keyset cursor from a previous response&#39;s pagination.cursor (Meta: AdLead id; LinkedIn: numeric start offset).
126
126
  # @return [ListLeads200Response]
127
127
  describe 'list_leads test' do
@@ -0,0 +1,49 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+
16
+ # Unit tests for Zernio::ToolsApi
17
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
18
+ # Please update as you see appropriate
19
+ describe 'ToolsApi' do
20
+ before do
21
+ # run before each test
22
+ @api_instance = Zernio::ToolsApi.new
23
+ end
24
+
25
+ after do
26
+ # run after each test
27
+ end
28
+
29
+ describe 'test an instance of ToolsApi' do
30
+ it 'should create an instance of ToolsApi' do
31
+ expect(@api_instance).to be_instance_of(Zernio::ToolsApi)
32
+ end
33
+ end
34
+
35
+ # unit tests for download_tik_tok_video
36
+ # Download a TikTok video
37
+ # Get a download URL or list available formats for a TikTok video. Requires Tools API access and uses the Tools API rate limit. Provider gateway failures and provider-side access blocks return 503; an unavailable video returns 404.
38
+ # @param url TikTok video URL or numeric video ID.
39
+ # @param [Hash] opts the optional parameters
40
+ # @option opts [String] :action Return a download URL or the available formats.
41
+ # @option opts [String] :format_id Format ID from the formats response. Omit to select the first available format.
42
+ # @return [DownloadTikTokVideo200Response]
43
+ describe 'download_tik_tok_video test' do
44
+ it 'should work' do
45
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,84 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::DownloadTikTokVideo200ResponseFormatsInner
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::DownloadTikTokVideo200ResponseFormatsInner do
21
+ #let(:instance) { Zernio::DownloadTikTokVideo200ResponseFormatsInner.new }
22
+
23
+ describe 'test an instance of DownloadTikTokVideo200ResponseFormatsInner' do
24
+ it 'should create an instance of DownloadTikTokVideo200ResponseFormatsInner' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::DownloadTikTokVideo200ResponseFormatsInner)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "id"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "label"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "ext"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "type"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ describe 'test attribute "height"' do
55
+ it 'should work' do
56
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
+ end
58
+ end
59
+
60
+ describe 'test attribute "width"' do
61
+ it 'should work' do
62
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
63
+ end
64
+ end
65
+
66
+ describe 'test attribute "fps"' do
67
+ it 'should work' do
68
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
69
+ end
70
+ end
71
+
72
+ describe 'test attribute "has_audio"' do
73
+ it 'should work' do
74
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
75
+ end
76
+ end
77
+
78
+ describe 'test attribute "has_video"' do
79
+ it 'should work' do
80
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
81
+ end
82
+ end
83
+
84
+ end