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.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/docs/CreateCommentAutomationRequest.md +1 -1
- data/docs/DownloadTikTokVideo200Response.md +30 -0
- data/docs/DownloadTikTokVideo200ResponseFormatsInner.md +34 -0
- data/docs/LeadGenApi.md +2 -2
- data/docs/ToolsApi.md +83 -0
- data/lib/zernio-sdk/api/lead_gen_api.rb +10 -2
- data/lib/zernio-sdk/api/tools_api.rb +96 -0
- data/lib/zernio-sdk/models/create_comment_automation_request.rb +22 -1
- data/lib/zernio-sdk/models/download_tik_tok_video200_response.rb +242 -0
- data/lib/zernio-sdk/models/download_tik_tok_video200_response_formats_inner.rb +219 -0
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +3 -0
- data/openapi.yaml +124 -2
- data/spec/api/lead_gen_api_spec.rb +1 -1
- data/spec/api/tools_api_spec.rb +49 -0
- data/spec/models/download_tik_tok_video200_response_formats_inner_spec.rb +84 -0
- data/spec/models/download_tik_tok_video200_response_spec.rb +72 -0
- data/zernio-sdk-0.0.911.gem +0 -0
- metadata +14 -2
- data/zernio-sdk-0.0.910.gem +0 -0
|
@@ -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
|
data/lib/zernio-sdk/version.rb
CHANGED
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'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
|