zelf-sdk 1.0.0

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,1213 @@
1
+ # Generated by codegen. Do not edit by hand.
2
+ require_relative 'model'
3
+
4
+ module Zelf
5
+ module Models
6
+ # Accepted values for AccountTypeEnum.
7
+ AccountTypeEnum = [
8
+ "tracked",
9
+ "influencer",
10
+ "owned",
11
+ ].freeze
12
+
13
+ # Accepted values for AnalysisScopeEnum.
14
+ AnalysisScopeEnum = [
15
+ "CONTENT",
16
+ "COMMENT",
17
+ ].freeze
18
+
19
+ # Accepted values for BlankEnum.
20
+ BlankEnum = [
21
+ "",
22
+ ].freeze
23
+
24
+ # Accepted values for ContentFormEnum.
25
+ ContentFormEnum = [
26
+ "VIDEO",
27
+ "IMAGE",
28
+ ].freeze
29
+
30
+ # Accepted values for KindEnum.
31
+ KindEnum = [
32
+ "snapshot",
33
+ "event",
34
+ ].freeze
35
+
36
+ # Accepted values for LastStatusEnum.
37
+ LastStatusEnum = [
38
+ "SUCCESS",
39
+ "FAILED",
40
+ ].freeze
41
+
42
+ # Accepted values for MentionTypeEnum.
43
+ MentionTypeEnum = [
44
+ "content",
45
+ "comment",
46
+ ].freeze
47
+
48
+ # Accepted values for PlatformEnum.
49
+ PlatformEnum = [
50
+ "instagram",
51
+ "tiktok",
52
+ "youtube",
53
+ ].freeze
54
+
55
+ # Accepted values for ResourceEnum.
56
+ ResourceEnum = [
57
+ "content",
58
+ "creator",
59
+ ].freeze
60
+
61
+ # Accepted values for SecretTypeEnum.
62
+ SecretTypeEnum = [
63
+ "default",
64
+ "new",
65
+ ].freeze
66
+
67
+ # Accepted values for StateEnum.
68
+ StateEnum = [
69
+ "PENDING",
70
+ "SUCCEEDED",
71
+ "FAILED",
72
+ "EXHAUSTED",
73
+ "QUOTA_EXHAUSTED",
74
+ ].freeze
75
+
76
+ # Accepted values for SubBrandTypeEnum.
77
+ SubBrandTypeEnum = [
78
+ "COMPETITIVE",
79
+ "THEME",
80
+ ].freeze
81
+
82
+ # Accepted values for TypeEnum.
83
+ TypeEnum = [
84
+ "USER_DEFINED_SAFETY_CRITERION",
85
+ "ADULT_CONTENT",
86
+ "ARMS_AND_AMMUNITION",
87
+ "MISINFORMATION",
88
+ "PROFANITY",
89
+ "POLITICS",
90
+ "DISCLOSURE",
91
+ ].freeze
92
+
93
+ class AiAnalysis < Zelf::Model; end
94
+ class AiAnalysisCreateRequest < Zelf::Model; end
95
+ class AiAnalysisResult < Zelf::Model; end
96
+ class AiAnalysisRun < Zelf::Model; end
97
+ class Brand < Zelf::Model; end
98
+ class BrandAccount < Zelf::Model; end
99
+ class BrandAccountGroups < Zelf::Model; end
100
+ class BrandAccountsWriteRequest < Zelf::Model; end
101
+ class BrandCatalog < Zelf::Model; end
102
+ class BrandCatalogItem < Zelf::Model; end
103
+ class BrandCreateSubBrandRequest < Zelf::Model; end
104
+ class BrandKeywords < Zelf::Model; end
105
+ class Comment < Zelf::Model; end
106
+ class CommentAuthor < Zelf::Model; end
107
+ class Content < Zelf::Model; end
108
+ class ContentActionRequestRequest < Zelf::Model; end
109
+ class ContentActionResponse < Zelf::Model; end
110
+ class ContentCreator < Zelf::Model; end
111
+ class ContentDiscovery < Zelf::Model; end
112
+ class ContentDiscoveryRequestRequest < Zelf::Model; end
113
+ class ContentFilterInputRequest < Zelf::Model; end
114
+ class ContentScopeRequest < Zelf::Model; end
115
+ class ContentStatistics < Zelf::Model; end
116
+ class Creator < Zelf::Model; end
117
+ class CreatorSync < Zelf::Model; end
118
+ class CreatorSyncCreateRequest < Zelf::Model; end
119
+ class CreatorVetting < Zelf::Model; end
120
+ class CreatorVettingRequest < Zelf::Model; end
121
+ class CreatorVettingResult < Zelf::Model; end
122
+ class CreatorVettingRun < Zelf::Model; end
123
+ class Detection < Zelf::Model; end
124
+ class DetectionBrandHint < Zelf::Model; end
125
+ class DetectionBrandHintRequest < Zelf::Model; end
126
+ class DetectionBrandResult < Zelf::Model; end
127
+ class DetectionBrandSummary < Zelf::Model; end
128
+ class DetectionContext < Zelf::Model; end
129
+ class DetectionContextInputRequest < Zelf::Model; end
130
+ class DetectionCreateRequest < Zelf::Model; end
131
+ class DetectionHints < Zelf::Model; end
132
+ class DetectionHintsRequest < Zelf::Model; end
133
+ class DetectionPlacement < Zelf::Model; end
134
+ class DetectionResult < Zelf::Model; end
135
+ class DetectionSummary < Zelf::Model; end
136
+ class DetectionVideo < Zelf::Model; end
137
+ class PatchedBrandUpdateRequest < Zelf::Model; end
138
+ class PatchedWebhookSubscriptionUpdateRequest < Zelf::Model; end
139
+ class ResultFile < Zelf::Model; end
140
+ class SafetyCheckRequest < Zelf::Model; end
141
+ class Usage < Zelf::Model; end
142
+ class UsageScope < Zelf::Model; end
143
+ class UsageWindow < Zelf::Model; end
144
+ class WebhookAvailableEvent < Zelf::Model; end
145
+ class WebhookData < Zelf::Model; end
146
+ class WebhookDeleteAcknowledgement < Zelf::Model; end
147
+ class WebhookDelivery < Zelf::Model; end
148
+ class WebhookFile < Zelf::Model; end
149
+ class WebhookPush < Zelf::Model; end
150
+ class WebhookSecret < Zelf::Model; end
151
+ class WebhookSecretCreateRequest < Zelf::Model; end
152
+ class WebhookSecretCreated < Zelf::Model; end
153
+ class WebhookSubscription < Zelf::Model; end
154
+ class WebhookSubscriptionCreateRequest < Zelf::Model; end
155
+ class WebhookSubscriptionCreated < Zelf::Model; end
156
+
157
+ # Response body for the AI analysis root.
158
+ class AiAnalysis
159
+ # ID of the analysis
160
+ field :id, "id"
161
+ # Always AI_ANALYSIS here
162
+ field :analysis_type, "analysis_type"
163
+ # The analysis label
164
+ field :name, "name"
165
+ # The subject the analysis focuses on
166
+ field :topic, "topic"
167
+ # When the analysis was created (UTC, ISO-8601)
168
+ field :created_at, "created_at", cast: :time
169
+ # When the analysis was last modified (UTC, ISO-8601)
170
+ field :modified_at, "modified_at", cast: :time
171
+ # The runs that make up this analysis, one per scope, ordered newest first
172
+ field :analyses, "analyses", cast: [AiAnalysisRun]
173
+ end
174
+
175
+ # Request body for ``POST /api/v1/ai_analysis/``.
176
+ class AiAnalysisCreateRequest
177
+ # A label for this analysis
178
+ field :name, "name"
179
+ # The brand, product, person or event to analyze, as a short term
180
+ field :topic, "topic"
181
+ # What to analyze: any of CONTENT, COMMENT
182
+ field :analysis_scope, "analysis_scope"
183
+ # Selects which content the analysis runs over
184
+ field :content_filters, "content_filters", cast: ContentFilterInputRequest
185
+ end
186
+
187
+ # A single analysis run with its downloadable ``result``.
188
+ class AiAnalysisResult
189
+ # ID of the analysis run
190
+ field :id, "id"
191
+ # ID of the analysis this run belongs to
192
+ field :analysis_id, "analysis_id"
193
+ # What this run covers: CONTENT or COMMENT
194
+ field :scope, "scope"
195
+ # Run status: one of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no...
196
+ field :status, "status"
197
+ # Signed, time-limited download of the run's analysis payload: download_url...
198
+ field :result, "result", cast: ResultFile
199
+ # When the run was created (UTC, ISO-8601)
200
+ field :created_at, "created_at", cast: :time
201
+ # When the run was last modified (UTC, ISO-8601)
202
+ field :modified_at, "modified_at", cast: :time
203
+ end
204
+
205
+ # A single analysis run, without its result payload. The run ``result`` is not
206
+ # included; retrieve it from `ai_analysis.results` once ``status`` is `COMPLETED`.
207
+ class AiAnalysisRun
208
+ # ID of the analysis run
209
+ field :id, "id"
210
+ # What this run covers: CONTENT or COMMENT
211
+ field :scope, "scope"
212
+ # Run status: one of IN_PROGRESS, COMPLETED, EMPTY_RESULT (finished with no...
213
+ field :status, "status"
214
+ end
215
+
216
+ # A brand you can reach.
217
+ class Brand
218
+ # Unique identifier for the brand
219
+ field :id, "id"
220
+ # Display name of the brand
221
+ field :title, "title"
222
+ # true for the brand this access belongs to, and false for every other brand the...
223
+ field :is_primary, "is_primary"
224
+ # COMPETITIVE or THEME for a sub-brand; null for a top-level brand
225
+ field :sub_brand_type, "sub_brand_type"
226
+ # Id of the parent brand for a sub-brand; null for a top-level brand
227
+ field :parent_brand_id, "parent_brand_id"
228
+ # The terms this brand uses to monitor social platforms
229
+ field :keywords, "keywords", cast: BrandKeywords
230
+ end
231
+
232
+ # An account tracked, marked as an influencer, or owned by the brand.
233
+ class BrandAccount
234
+ # The account's handle
235
+ field :username, "username"
236
+ # instagram or tiktok
237
+ field :platform, "platform"
238
+ # The account's profile URL, when available
239
+ field :external_url, "external_url"
240
+ end
241
+
242
+ # A brand's accounts, grouped into one list per account type. Every key is optional
243
+ # because `account_type` narrows the response to the single list it names.
244
+ class BrandAccountGroups
245
+ # Accounts the brand monitors
246
+ field :tracked, "tracked", cast: [BrandAccount]
247
+ # Accounts the brand treats as partnership candidates
248
+ field :influencer, "influencer", cast: [BrandAccount]
249
+ # Profiles the brand operates itself
250
+ field :owned, "owned", cast: [BrandAccount]
251
+ end
252
+
253
+ # Add or remove profiles in a brand's tracked/influencer/owned list.
254
+ class BrandAccountsWriteRequest
255
+ # Brand to modify, specified as an id from brands.list
256
+ field :brand_id, "brand_id"
257
+ # The list to modify: tracked, influencer, or owned for the brand's own profiles
258
+ field :account_type, "account_type"
259
+ # Profile URLs on a supported platform (instagram or tiktok)
260
+ field :profile_urls, "profile_urls"
261
+ end
262
+
263
+ # A brand in the curated catalog, readable by every api key.
264
+ class BrandCatalog
265
+ # Unique identifier for the brand
266
+ field :id, "id"
267
+ # Display name of the brand
268
+ field :title, "title"
269
+ # URL of the brand's logo, when one is on file
270
+ field :brand_logo, "brand_logo"
271
+ # Identifier of the brand's industry
272
+ field :industry_id, "industry_id"
273
+ # Name of the brand's industry
274
+ field :industry_name, "industry_name"
275
+ # Identifier of the brand's category
276
+ field :category_id, "category_id"
277
+ # Name of the brand's category
278
+ field :category_name, "category_name"
279
+ end
280
+
281
+ # An industry or a category, used to filter the brand catalog.
282
+ class BrandCatalogItem
283
+ # Identifier to pass as industry_id or category_id to brands.catalog
284
+ field :id, "id"
285
+ # Display name of the industry or category
286
+ field :name, "name"
287
+ # industry or category
288
+ field :level, "level"
289
+ # Industry id a category belongs to; null for an industry
290
+ field :parent_id, "parent_id"
291
+ end
292
+
293
+ # Create a sub-brand under the workspace brand.
294
+ class BrandCreateSubBrandRequest
295
+ # Plain keywords the brand monitors across platforms, matched as-is (case-...
296
+ field :search_terms, "search_terms"
297
+ # Terms that must be present for content to match
298
+ field :inclusion_terms, "inclusion_terms"
299
+ # Terms that disqualify content from matching
300
+ field :exclusion_terms, "exclusion_terms"
301
+ # Secondary inclusion terms layered on top of inclusion_terms
302
+ field :compound_inclusion_terms, "compound_inclusion_terms"
303
+ # Terms that mark matched content as influencer content
304
+ field :influencer_terms, "influencer_terms"
305
+ # ISO 639-1 codes to track, or the single value all
306
+ field :allowed_languages, "allowed_languages"
307
+ # Full-text search across the caption, transcript, summary, and hashtags
308
+ field :boolean_query, "boolean_query"
309
+ # Display name of the new sub-brand
310
+ field :title, "title"
311
+ # Type of sub-brand: COMPETITIVE or THEME
312
+ field :sub_brand_type, "sub_brand_type"
313
+ end
314
+
315
+ # The terms this brand uses to monitor social platforms.
316
+ class BrandKeywords
317
+ # Plain keywords the brand monitors across platforms, matched as-is (case-...
318
+ field :search_terms, "search_terms"
319
+ # Terms that must be present for content to match
320
+ field :inclusion_terms, "inclusion_terms"
321
+ # Terms that disqualify content from matching, even when other criteria are met
322
+ field :exclusion_terms, "exclusion_terms"
323
+ # Secondary inclusion terms layered on top of inclusion_terms
324
+ field :compound_inclusion_terms, "compound_inclusion_terms"
325
+ # Terms that mark matched content as influencer content (for example, sponsored,...
326
+ field :influencer_terms, "influencer_terms"
327
+ # ISO 639-1 codes for the languages the brand tracks
328
+ field :allowed_languages, "allowed_languages"
329
+ # Full-text search across the caption, transcript, summary, and hashtags
330
+ field :boolean_query, "boolean_query"
331
+ end
332
+
333
+ # A comment left on a piece of content.
334
+ class Comment
335
+ # Unique identifier for the comment
336
+ field :id, "id"
337
+ # The comment's text content
338
+ field :text, "text"
339
+ # The platform the comment was posted on
340
+ field :platform, "platform"
341
+ # Number of likes the comment has received
342
+ field :like_count, "like_count"
343
+ # Time the comment was posted on its platform (UTC)
344
+ field :posted_at, "posted_at", cast: :time
345
+ # Identifier of the content the comment was left on
346
+ field :content_id, "content_id"
347
+ # Identifier of the comment this is a reply to
348
+ field :parent_comment_id, "parent_comment_id"
349
+ # Whether this is a top-level comment, rather than a reply to another comment
350
+ field :is_parent_comment, "is_parent_comment"
351
+ # The creator who wrote the comment
352
+ field :author, "author", cast: CommentAuthor
353
+ end
354
+
355
+ # A short profile of the creator who wrote the comment.
356
+ class CommentAuthor
357
+ # Unique identifier for the author
358
+ field :id, "id"
359
+ # The author's username or handle on the platform (without the leading @)
360
+ field :username, "username"
361
+ # The author's display name on the platform
362
+ field :name, "name"
363
+ # URL of the author's profile picture
364
+ field :profile_picture_url, "profile_picture_url"
365
+ end
366
+
367
+ # A piece of content (a post, video, or image) and its metrics.
368
+ class Content
369
+ # Unique identifier for this piece of content
370
+ field :id, "id"
371
+ # The post's identifier on its platform
372
+ field :platform_post_id, "platform_post_id"
373
+ # The platform the content was published on
374
+ field :platform, "platform"
375
+ # Whether the content is a video or an image
376
+ field :content_form, "content_form"
377
+ # URL of the content's thumbnail image
378
+ field :thumbnail_url, "thumbnail_url"
379
+ # Time the content was originally published on its platform (UTC)
380
+ field :posted_at, "posted_at", cast: :time
381
+ # Total number of times the content has been viewed
382
+ field :view_count, "view_count"
383
+ # Total number of likes the content has received
384
+ field :like_count, "like_count"
385
+ # Total number of comments on the content
386
+ field :comment_count, "comment_count"
387
+ # Total number of times the content has been shared
388
+ field :share_count, "share_count"
389
+ # Sum of the likes, comments, and shares the content has received
390
+ field :total_engagement, "total_engagement"
391
+ # ISO 639 code of the content's primary language
392
+ field :language, "language"
393
+ # Length of the media in seconds
394
+ field :media_duration, "media_duration"
395
+ # Engagement per view (likes plus comments plus shares, divided by views)
396
+ field :engagement_rate, "engagement_rate"
397
+ # Estimated marketing value of the content, in US cents
398
+ field :earned_media_value_cents, "earned_media_value_cents"
399
+ # The creator who published the content
400
+ field :creator, "creator", cast: ContentCreator
401
+ # Identifier of the brand that the brand-specific signals on this row (is_owned,...
402
+ field :brand_id, "brand_id"
403
+ # Net promoter score for the content from the perspective of the scoped brand
404
+ field :net_promoter_score, "net_promoter_score"
405
+ # Whether the scoped brand owns the content; that is, whether it was published by...
406
+ field :is_owned, "is_owned"
407
+ # Whether the post tags the scoped brand on the platform
408
+ field :is_tagged, "is_tagged"
409
+ # Whether the scoped brand counts the content as influencer content: it matches the...
410
+ field :is_influencer, "is_influencer"
411
+ # How the scoped brand is mentioned in the content
412
+ field :mention_type, "mention_type"
413
+ # Short caption or title of the post (the primary user-visible text)
414
+ field :caption, "caption"
415
+ # Long-form description of the post
416
+ field :description, "description"
417
+ # Transcribed speech from the content's audio, when available
418
+ field :transcript, "transcript"
419
+ # Direct URL to the post on its platform
420
+ field :platform_url, "platform_url"
421
+ # Short AI-generated summary of the content
422
+ field :ai_summary, "ai_summary"
423
+ # The search term the content was most recently found by
424
+ field :last_keyword, "last_keyword"
425
+ # Hashtags used in the post, normalized to lowercase and without the leading #
426
+ field :hashtags, "hashtags"
427
+ end
428
+
429
+ # Request body for the content transcribe and AI summarize actions.
430
+ class ContentActionRequestRequest
431
+ # Identifier of the content, as returned by content.list
432
+ field :content_id, "content_id"
433
+ end
434
+
435
+ # State of a content transcribe or AI summarize request.
436
+ class ContentActionResponse
437
+ # Identifier of the content
438
+ field :content_id, "content_id"
439
+ # PENDING when the work was queued, COMPLETED when the content already has the result
440
+ field :status, "status"
441
+ end
442
+
443
+ # The creator who published the content.
444
+ class ContentCreator
445
+ # Unique identifier for the creator
446
+ field :id, "id"
447
+ # The creator's username or handle on the platform (without an @)
448
+ field :username, "username"
449
+ # The creator's display name on the platform
450
+ field :name, "name"
451
+ # The platform the creator publishes on
452
+ field :platform, "platform"
453
+ # The platform-side identifier of the creator's account
454
+ field :platform_handle, "platform_handle"
455
+ # Direct URL to the creator's profile on the platform
456
+ field :platform_url, "platform_url"
457
+ # URL of the creator's profile picture
458
+ field :profile_picture_url, "profile_picture_url"
459
+ # The creator's profile bio as it appears on the platform
460
+ field :profile_bio, "profile_bio"
461
+ # The creator's follower count as of the most recent observation
462
+ field :follower_count, "follower_count"
463
+ # Number of active content items attributed to the creator
464
+ field :active_content_count, "active_content_count"
465
+ end
466
+
467
+ # A content discovery job started for a search term.
468
+ class ContentDiscovery
469
+ # Identifier of the discovery job
470
+ field :id, "id"
471
+ # The search term the discovery job was started for
472
+ field :search_term, "search_term"
473
+ # When the discovery job was created (UTC, ISO 8601)
474
+ field :created_at, "created_at", cast: :time
475
+ # Time of the most recent change to the discovery job (UTC, ISO 8601)
476
+ field :updated_at, "updated_at", cast: :time
477
+ # Platforms the indexing job was dispatched to
478
+ field :platforms, "platforms"
479
+ # Status of the discovery job
480
+ field :status, "status"
481
+ # Whether a new indexing job was dispatched
482
+ field :dispatched, "dispatched"
483
+ end
484
+
485
+ # Request body for ``POST /api/v1/content/discovery/``.
486
+ class ContentDiscoveryRequestRequest
487
+ # The term to index content for (for example, nike running)
488
+ field :search_term, "search_term"
489
+ # Platforms to index (instagram, tiktok, youtube)
490
+ field :platforms, "platforms"
491
+ end
492
+
493
+ # Selects which content the analysis runs over. These parameters correspond one-to-one
494
+ # with the `content.list` filter parameters. At least one of `search`, `creator_id`,
495
+ # `creator_username`, `external_id`, or `brand_id` is required to scope the analysis.
496
+ # Supplied filters are combined with AND; min/max pairs are inclusive bounds, and
497
+ # dates are UTC ISO-8601 instants. When `posted_after`, `posted_before`, and
498
+ # `posted_within_days` are all omitted, the analysis defaults to the most recent
499
+ # window. The window between `posted_after` and `posted_before` must not exceed 366
500
+ # days. The analysis runs over the highest-ranked matching content by `order_by`, up
501
+ # to 500 items or the limit configured for your workspace. When `order_by` is omitted,
502
+ # content is ranked by `earned_media_value_cents` descending.
503
+ class ContentFilterInputRequest
504
+ # Include only content with at least this many views
505
+ field :view_count_min, "view_count_min"
506
+ # Include only content with at most this many views
507
+ field :view_count_max, "view_count_max"
508
+ # Include only content with at least this many comments
509
+ field :comment_count_min, "comment_count_min"
510
+ # Include only content with at most this many comments
511
+ field :comment_count_max, "comment_count_max"
512
+ # Include only content with at least this many likes
513
+ field :like_count_min, "like_count_min"
514
+ # Include only content with at most this many likes
515
+ field :like_count_max, "like_count_max"
516
+ # Include only content with at least this many shares
517
+ field :share_count_min, "share_count_min"
518
+ # Include only content with at most this many shares
519
+ field :share_count_max, "share_count_max"
520
+ # Minimum total engagement (likes + comments + shares)
521
+ field :total_engagement_min, "total_engagement_min"
522
+ # Maximum total engagement (likes + comments + shares)
523
+ field :total_engagement_max, "total_engagement_max"
524
+ # Minimum estimated earned media value, in cents
525
+ field :earned_media_value_cents_min, "earned_media_value_cents_min"
526
+ # Maximum estimated earned media value, in cents
527
+ field :earned_media_value_cents_max, "earned_media_value_cents_max"
528
+ # Include only content at least this many seconds long
529
+ field :media_duration_min, "media_duration_min"
530
+ # Include only content at most this many seconds long
531
+ field :media_duration_max, "media_duration_max"
532
+ # Include only content posted at or after this UTC ISO-8601 time
533
+ field :posted_after, "posted_after", cast: :time
534
+ # Include only content posted at or before this UTC ISO-8601 time
535
+ field :posted_before, "posted_before", cast: :time
536
+ # Platforms to include
537
+ field :platform, "platform"
538
+ # Language codes to include, for example en or es
539
+ field :language, "language"
540
+ # Content medium
541
+ field :content_form, "content_form"
542
+ # Full-text search across caption, transcript, and summary
543
+ field :search, "search"
544
+ # Restrict to a single creator by id (from creators.list)
545
+ field :creator_id, "creator_id"
546
+ # Restrict to an accessible brand id (from brands.list)
547
+ field :brand_id, "brand_id"
548
+ # Include only content owned by the brand
549
+ field :is_owned, "is_owned"
550
+ # Include only content where the brand is tagged
551
+ field :is_tagged, "is_tagged"
552
+ # Include only the brand's influencer content, or exclude it with false
553
+ field :is_influencer, "is_influencer"
554
+ # Platform-side post id
555
+ field :external_id, "external_id"
556
+ # Creator username substring
557
+ field :creator_username, "creator_username"
558
+ # Restrict to these mention kinds
559
+ field :mention_type, "mention_type"
560
+ # Exclude these mention kinds
561
+ field :mention_type_not, "mention_type_not"
562
+ # Include only content whose creator has at least this many followers
563
+ field :creator_follower_count_min, "creator_follower_count_min"
564
+ # Include only content whose creator has at most this many followers
565
+ field :creator_follower_count_max, "creator_follower_count_max"
566
+ # Minimum engagement as a fraction of views (e.g
567
+ field :engagement_rate_min, "engagement_rate_min"
568
+ # Maximum engagement as a fraction of views (e.g
569
+ field :engagement_rate_max, "engagement_rate_max"
570
+ # Minimum brand net promoter score for the content
571
+ field :net_promoter_score_min, "net_promoter_score_min"
572
+ # Maximum brand net promoter score for the content
573
+ field :net_promoter_score_max, "net_promoter_score_max"
574
+ # Start of the window, counted back from the current time, in days (1-365)
575
+ field :posted_within_days, "posted_within_days"
576
+ # Start of the window, counted back from the current time, in hours (1-8760)
577
+ field :posted_within_hours, "posted_within_hours"
578
+ # Sort the selected content
579
+ field :order_by, "order_by"
580
+ end
581
+
582
+ # Specifies which of the creator's content relationships feed the analysis. Flags that
583
+ # are omitted default to owned content only.
584
+ class ContentScopeRequest
585
+ # Whether to include content the creator originally posted
586
+ field :owned, "owned"
587
+ # Whether to include content the creator reposted
588
+ field :repost, "repost"
589
+ # Whether to include content the creator liked
590
+ field :liked, "liked"
591
+ end
592
+
593
+ # Aggregated totals for a filtered set of content.
594
+ class ContentStatistics
595
+ # Number of unique pieces of content in the filtered set
596
+ field :post_count, "post_count"
597
+ # Total views across the filtered set
598
+ field :total_views, "total_views"
599
+ # Total likes across the filtered set
600
+ field :total_likes, "total_likes"
601
+ # Total comments across the filtered set
602
+ field :total_comments, "total_comments"
603
+ # Total shares across the filtered set
604
+ field :total_shares, "total_shares"
605
+ # Total engagement (likes + comments + shares) across the filtered set
606
+ field :total_engagement, "total_engagement"
607
+ # Total estimated marketing value across the filtered set, in US cents
608
+ field :total_earned_media_value_cents, "total_earned_media_value_cents"
609
+ # Total media length in seconds across the filtered set
610
+ field :total_media_duration, "total_media_duration"
611
+ # Total engagement divided by total views across the filtered set
612
+ field :engagement_rate, "engagement_rate"
613
+ # Number of distinct creators represented in the filtered set
614
+ field :unique_creator_count, "unique_creator_count"
615
+ end
616
+
617
+ # A creator and their public profile fields.
618
+ class Creator
619
+ # Unique identifier of the creator
620
+ field :id, "id"
621
+ # The creator's username or handle on the platform, without the @
622
+ field :username, "username"
623
+ # The creator's display name on the platform
624
+ field :name, "name"
625
+ # The creator's email address when known by the platform; empty otherwise
626
+ field :email, "email"
627
+ # The platform the creator is on
628
+ field :platform, "platform"
629
+ # The platform-side identifier of the account
630
+ field :platform_handle, "platform_handle"
631
+ # The creator's follower count as of the most recent observation
632
+ field :follower_count, "follower_count"
633
+ # Number of active content items attributed to the creator
634
+ field :active_content_count, "active_content_count"
635
+ # The creator's profile bio as it appears on the platform
636
+ field :profile_bio, "profile_bio"
637
+ # Direct URL to the creator's profile on the platform
638
+ field :platform_url, "platform_url"
639
+ # URL of the creator's profile picture
640
+ field :profile_picture_url, "profile_picture_url"
641
+ end
642
+
643
+ # One creator sync job.
644
+ class CreatorSync
645
+ # Identifier of the sync job
646
+ field :id, "id"
647
+ # Time the job was created (UTC, ISO-8601)
648
+ field :created_at, "created_at", cast: :time
649
+ # Time the job was most recently modified (UTC, ISO-8601)
650
+ field :updated_at, "updated_at", cast: :time
651
+ # Identifier of the synced creator
652
+ field :creator_id, "creator_id"
653
+ # The profile URL this job syncs
654
+ field :profile_url, "profile_url"
655
+ # Where the job has got to
656
+ field :status, "status"
657
+ end
658
+
659
+ # Request body for ``POST /api/v1/creator_sync/``.
660
+ class CreatorSyncCreateRequest
661
+ # Direct URL to the creator's profile on a supported platform (tiktok, instagram,...
662
+ field :profile_url, "profile_url"
663
+ end
664
+
665
+ # A creator vetting, including its analysis runs and request settings.
666
+ class CreatorVetting
667
+ # Identifier of the vetting
668
+ field :id, "id"
669
+ # Time the vetting was created (UTC, ISO-8601)
670
+ field :created_at, "created_at", cast: :time
671
+ # Time the vetting was most recently modified (UTC, ISO-8601)
672
+ field :updated_at, "updated_at", cast: :time
673
+ # Identifier of the creator the vetting is tied to
674
+ field :creator_id, "creator_id"
675
+ # Status of the vetting
676
+ field :status, "status"
677
+ # The creator tied to this vetting
678
+ field :creator, "creator", cast: Creator
679
+ # Always CREATOR_ANALYSIS here
680
+ field :type, "type"
681
+ # Identifier of the scrape job triggered for this request
682
+ field :sync_job_id, "sync_job_id"
683
+ # The analysis runs tied to this vetting, ordered newest first
684
+ field :analysis, "analysis", cast: [CreatorVettingRun]
685
+ # The safety criteria submitted with this vetting request
686
+ field :safety_checks, "safety_checks"
687
+ # The content relationships analyzed for this creator
688
+ field :content_scope, "content_scope"
689
+ end
690
+
691
+ # Request body for ``POST /api/v1/creator/vetting/``.
692
+ class CreatorVettingRequest
693
+ # When true, re-indexes the creator even if they already exist in our database
694
+ field :resync_profile, "resync_profile"
695
+ # Direct URL to the creator's profile on a supported platform (instagram, tiktok,...
696
+ field :profile_url, "profile_url"
697
+ # The creator's content relationships to analyze
698
+ field :content_scope, "content_scope", cast: ContentScopeRequest
699
+ # Safety criteria for the AI pipeline to evaluate for this creator
700
+ field :safety_checks, "safety_checks", cast: [SafetyCheckRequest]
701
+ end
702
+
703
+ # An analysis run together with its downloadable ``result``. Returned by
704
+ # `creator_vetting.results` for the analysis `creator_vetting.list` points to.
705
+ class CreatorVettingResult
706
+ # Identifier of the analysis record
707
+ field :id, "id"
708
+ # The subject this analysis covers: CONTENT or COMMENT
709
+ field :scope, "scope"
710
+ # Time the analysis was created (UTC, ISO-8601)
711
+ field :created_at, "created_at", cast: :time
712
+ # Time the analysis was most recently modified (UTC, ISO-8601)
713
+ field :modified_at, "modified_at", cast: :time
714
+ # Identifier of the vetting this analysis belongs to
715
+ field :vetting_id, "vetting_id"
716
+ # Status of the analysis
717
+ field :status, "status"
718
+ # Signed, time-limited download of the run's analysis payload
719
+ field :result, "result", cast: ResultFile
720
+ end
721
+
722
+ # A lightweight analysis run that belongs to a vetting. This representation omits the
723
+ # ``result``. Retrieve it from `creator_vetting.results` once ``status`` is
724
+ # ``COMPLETED``.
725
+ class CreatorVettingRun
726
+ # Identifier of the analysis record
727
+ field :id, "id"
728
+ # The subject this analysis covers: CONTENT or COMMENT
729
+ field :scope, "scope"
730
+ # Status of the analysis
731
+ field :status, "status"
732
+ end
733
+
734
+ # One brand placement detection run.
735
+ class Detection
736
+ # Identifier of the detection
737
+ field :id, "id"
738
+ # Time the detection was created (UTC, ISO-8601)
739
+ field :created_at, "created_at", cast: :time
740
+ # Time the detection was most recently modified (UTC, ISO-8601)
741
+ field :updated_at, "updated_at", cast: :time
742
+ # Where the detection has got to
743
+ field :status, "status"
744
+ # The input this detection was created with
745
+ field :context, "context", cast: DetectionContext
746
+ # The placements document
747
+ field :result, "result", cast: DetectionResult
748
+ end
749
+
750
+ # One brand to look for, and what counts as evidence for it.
751
+ class DetectionBrandHint
752
+ # Display name of the brand, at most 60 characters
753
+ field :name, "name"
754
+ # 2 to 10 words, logos and product names that count as evidence of this brand, the...
755
+ field :identifiers, "identifiers"
756
+ # Up to 12 look-alikes that must not count, each at most 200 characters, for...
757
+ field :negatives, "negatives"
758
+ end
759
+
760
+ # One brand to look for, and what counts as evidence for it.
761
+ class DetectionBrandHintRequest
762
+ # Display name of the brand, at most 60 characters
763
+ field :name, "name"
764
+ # 2 to 10 words, logos and product names that count as evidence of this brand, the...
765
+ field :identifiers, "identifiers"
766
+ # Up to 12 look-alikes that must not count, each at most 200 characters, for...
767
+ field :negatives, "negatives"
768
+ end
769
+
770
+ # Everything found for one requested brand.
771
+ class DetectionBrandResult
772
+ # The requested brand, named exactly as it was asked for
773
+ field :brand_name, "brand_name"
774
+ # Whether the brand was present at all
775
+ field :found, "found"
776
+ # Counts for this brand
777
+ field :summary, "summary", cast: DetectionBrandSummary
778
+ # Every placement for this brand, earliest first
779
+ field :placements, "placements", cast: [DetectionPlacement]
780
+ end
781
+
782
+ # Counts for one brand.
783
+ class DetectionBrandSummary
784
+ # Placements for this brand
785
+ field :placements, "placements"
786
+ # Of those, confirmed
787
+ field :confirmed, "confirmed"
788
+ # Of those, left for review
789
+ field :review, "review"
790
+ end
791
+
792
+ # The input the detection run was given, as stored.
793
+ class DetectionContext
794
+ # URL of the content being analysed
795
+ field :external_url, "external_url"
796
+ # The brands to detect and the evidence that counts for each
797
+ field :hints, "hints", cast: DetectionHints
798
+ end
799
+
800
+ # What the caller supplies as the detection's input.
801
+ class DetectionContextInputRequest
802
+ # The brands to detect and the evidence that counts for each
803
+ field :hints, "hints", cast: DetectionHintsRequest
804
+ end
805
+
806
+ # Request body for ``POST /api/v1/detection/``.
807
+ class DetectionCreateRequest
808
+ # Identifier of content Zelf already holds, obtained from content.list
809
+ field :content_id, "content_id"
810
+ # Direct URL to the post or video to analyse
811
+ field :content_url, "content_url"
812
+ # The brands to detect and the evidence that counts for each
813
+ field :context, "context", cast: DetectionContextInputRequest
814
+ end
815
+
816
+ # What the detector is asked to look for.
817
+ class DetectionHints
818
+ # 1 to 200 brands to detect, in the order the results report them
819
+ field :brands, "brands", cast: [DetectionBrandHint]
820
+ end
821
+
822
+ # What the detector is asked to look for.
823
+ class DetectionHintsRequest
824
+ # 1 to 200 brands to detect, in the order the results report them
825
+ field :brands, "brands", cast: [DetectionBrandHintRequest]
826
+ end
827
+
828
+ # One brand present in the content at one moment, with its evidence.
829
+ class DetectionPlacement
830
+ # mm:ss-mm:ss, or mm:ss for a single moment
831
+ field :timestamp, "timestamp"
832
+ # YouTube: opens the video 5 seconds before the placement
833
+ field :video_url_at_timestamp, "video_url_at_timestamp"
834
+ # How it was detected
835
+ field :modality, "modality"
836
+ # What was observed, in the detector's own words
837
+ field :what_detected, "what_detected"
838
+ # Why the observation counts as this brand
839
+ field :reasoning, "reasoning"
840
+ # confirmed: passed a final check against the video's frames
841
+ field :confidence, "confidence"
842
+ end
843
+
844
+ # The placements document a finished detection produces.
845
+ class DetectionResult
846
+ # The content that was analysed
847
+ field :video, "video", cast: DetectionVideo
848
+ # Counts across the whole run
849
+ field :summary, "summary", cast: DetectionSummary
850
+ # One entry per requested brand, in request order, including the brands that were...
851
+ field :brands, "brands", cast: [DetectionBrandResult]
852
+ end
853
+
854
+ # Counts across the whole run.
855
+ class DetectionSummary
856
+ # How many brands the rubric asked for
857
+ field :brands_requested, "brands_requested"
858
+ # How many of those brands were present
859
+ field :brands_found, "brands_found"
860
+ # Total placements reported
861
+ field :placements, "placements"
862
+ # Placements that passed the final frame check
863
+ field :confirmed, "confirmed"
864
+ # Placements that did not pass the final frame check, including every Audio placement
865
+ field :review, "review"
866
+ end
867
+
868
+ # The content the placements were found in.
869
+ class DetectionVideo
870
+ # URL of the analysed content
871
+ field :video_url, "video_url"
872
+ # Platform the content was posted on
873
+ field :platform, "platform"
874
+ # Length of the content in seconds
875
+ field :duration_s, "duration_s"
876
+ end
877
+
878
+ # Partial update for a brand's monitoring keywords. Every field is optional, and only
879
+ # the supplied fields are changed, but at least one field is required.
880
+ class PatchedBrandUpdateRequest
881
+ # Plain keywords the brand monitors across platforms, matched as-is (case-...
882
+ field :search_terms, "search_terms"
883
+ # Terms that must be present for content to match
884
+ field :inclusion_terms, "inclusion_terms"
885
+ # Terms that disqualify content from matching
886
+ field :exclusion_terms, "exclusion_terms"
887
+ # Secondary inclusion terms layered on top of inclusion_terms
888
+ field :compound_inclusion_terms, "compound_inclusion_terms"
889
+ # Terms that mark matched content as influencer content
890
+ field :influencer_terms, "influencer_terms"
891
+ # ISO 639-1 codes to track, or the single value all
892
+ field :allowed_languages, "allowed_languages"
893
+ # Full-text search across the caption, transcript, summary, and hashtags
894
+ field :boolean_query, "boolean_query"
895
+ # Brand to update, specified as an id from brands.list
896
+ field :brand_id, "brand_id"
897
+ end
898
+
899
+ # The PatchedWebhookSubscriptionUpdateRequest object.
900
+ class PatchedWebhookSubscriptionUpdateRequest
901
+ # Destination URL where webhook payloads are sent
902
+ field :url, "url"
903
+ # Filters that scope which resources are delivered
904
+ field :resource_filters, "resource_filters"
905
+ # Extra HTTP headers sent with each webhook request
906
+ field :custom_headers, "custom_headers"
907
+ # Hours between snapshot deliveries
908
+ field :interval_hours, "interval_hours"
909
+ # Maximum number of items per delivery
910
+ field :max_items, "max_items"
911
+ # Whether this subscription is active and will be dispatched
912
+ field :enabled, "enabled"
913
+ end
914
+
915
+ # Signed, time-limited download of an analysis run's result payload.
916
+ class ResultFile
917
+ # Unix epoch seconds after which download_url expires
918
+ field :expires_at, "expires_at"
919
+ # Payload encoding
920
+ field :format, "format"
921
+ # Signed URL to request the JSON payload
922
+ field :download_url, "download_url"
923
+ end
924
+
925
+ # A single safety criterion the AI pipeline evaluates against the creator. Only
926
+ # ``type`` is required. The ``extra`` field supplies the label for the
927
+ # ``USER_DEFINED_SAFETY_CRITERION`` type and is ignored for the predefined types.
928
+ class SafetyCheckRequest
929
+ # Category of the safety criterion
930
+ field :type, "type"
931
+ # Label for USER_DEFINED_SAFETY_CRITERION, stored as the criterion's value
932
+ field :extra, "extra"
933
+ end
934
+
935
+ # Live consumption for the brand behind the current credentials.
936
+ class Usage
937
+ # Brand these figures belong to
938
+ field :brand_id, "brand_id"
939
+ # api_key or mcp, whichever made this call
940
+ field :authenticated_as, "authenticated_as"
941
+ # Keyed by group
942
+ field :scopes, "scopes"
943
+ end
944
+
945
+ # One metered group, with every window that has a limit.
946
+ class UsageScope
947
+ # Name of the group, as an admin sees it
948
+ field :human_name, "human_name"
949
+ # request counts calls; item counts rows returned
950
+ field :kind, "kind"
951
+ # Which product the group meters: api for direct requests, mcp for AI clients
952
+ field :section, "section"
953
+ # Keyed by window: rps, rpm, rph, rpd, rpmonth, or the item windows
954
+ field :windows, "windows"
955
+ end
956
+
957
+ # Consumption of one window, e.g. requests in the current hour.
958
+ class UsageWindow
959
+ # Most that may be spent in this window
960
+ field :limit, "limit"
961
+ # Spent so far in this window
962
+ field :used, "used"
963
+ # Still available in this window
964
+ field :remaining, "remaining"
965
+ # Seconds until the window resets
966
+ field :reset_in, "reset_in"
967
+ end
968
+
969
+ # The WebhookAvailableEvent object.
970
+ class WebhookAvailableEvent
971
+ # Event type identifier, e.g
972
+ field :event, "event"
973
+ # Human-readable grouping label
974
+ field :group, "group"
975
+ # What triggers the event and what the payload holds
976
+ field :description, "description"
977
+ end
978
+
979
+ # The carried content of a push. The populated key depends on `delivery_mode`.
980
+ # `manifest` deliveries populate `files` (downloadable snapshot files) and, for the
981
+ # content resource, `statistics`. `inline` deliveries populate `items` (the rows
982
+ # directly). The unused key is omitted.
983
+ class WebhookData
984
+ # Total number of rows in this delivery, summed across files or equal to the length...
985
+ field :item_count, "item_count"
986
+ # Aggregate totals over the snapshot, including post count, views, engagement,...
987
+ field :statistics, "statistics"
988
+ # Manifest mode only
989
+ field :files, "files", cast: [WebhookFile]
990
+ # Inline mode only
991
+ field :items, "items"
992
+ end
993
+
994
+ # The WebhookDeleteAcknowledgement object.
995
+ class WebhookDeleteAcknowledgement
996
+ # Always true; confirms the webhook resource delete was acknowledged
997
+ field :acknowledged, "acknowledged"
998
+ # Action that was performed
999
+ field :action, "action"
1000
+ # Completion status of the action
1001
+ field :status, "status"
1002
+ end
1003
+
1004
+ # The WebhookDelivery object.
1005
+ class WebhookDelivery
1006
+ # Encoded identifier of the webhook delivery
1007
+ field :id, "id"
1008
+ # Encoded identifier of the parent subscription
1009
+ field :subscription, "subscription"
1010
+ # When this delivery is scheduled to be sent
1011
+ field :scheduled_at, "scheduled_at", cast: :time
1012
+ # Number of delivery attempts made so far
1013
+ field :attempt_count, "attempt_count"
1014
+ # Current state of the delivery
1015
+ field :state, "state"
1016
+ # HTTP status code returned by the most recent attempt
1017
+ field :last_status_code, "last_status_code"
1018
+ # Error message from the most recent failed attempt
1019
+ field :last_error, "last_error"
1020
+ # Excerpt of the response body returned by the endpoint
1021
+ field :response_excerpt, "response_excerpt"
1022
+ # When the delivery finished (succeeded or exhausted)
1023
+ field :finished_at, "finished_at", cast: :time
1024
+ # Number of items included in the delivered payload
1025
+ field :item_count, "item_count"
1026
+ # SHA-256 checksum of the delivered payload
1027
+ field :sha256, "sha256"
1028
+ # Size of the delivered payload in bytes
1029
+ field :size_bytes, "size_bytes"
1030
+ # Timestamp set once when the row is first created
1031
+ field :created, "created", cast: :time
1032
+ # Timestamp updated automatically on every save
1033
+ field :modified, "modified", cast: :time
1034
+ end
1035
+
1036
+ # One downloadable snapshot file in a manifest push. A delivery currently consists of
1037
+ # a single file, so `files` carries one entry. The array shape allows a snapshot to be
1038
+ # sharded across several files in the future without changing the envelope.
1039
+ class WebhookFile
1040
+ # File encoding
1041
+ field :format, "format"
1042
+ # Unix epoch seconds after which download_url stops working
1043
+ field :expires_at, "expires_at"
1044
+ # Hex SHA-256 of the file body
1045
+ field :sha256, "sha256"
1046
+ # Size of the file in bytes
1047
+ field :size_bytes, "size_bytes"
1048
+ # Number of rows in this file
1049
+ field :item_count, "item_count"
1050
+ # Signed, time-limited URL from which to retrieve the file
1051
+ field :download_url, "download_url"
1052
+ end
1053
+
1054
+ # The outer payload ZelfAI POSTs to receivers, uniform across all pushes. Top-level
1055
+ # fields are delivery metadata and remain identical across modes. `data` carries the
1056
+ # content; which key inside it is populated (`files` or `items`) is determined by
1057
+ # `delivery_mode`. `manifest` deliveries use `data.files`, while `inline` event pushes
1058
+ # use `data.items`.
1059
+ class WebhookPush
1060
+ # Unique id of this delivery attempt, stable across retries of the same push
1061
+ field :id, "id"
1062
+ # Event type
1063
+ field :type, "type"
1064
+ # Id of the subscription that produced this push
1065
+ field :subscription_id, "subscription_id"
1066
+ # Unix epoch seconds at which ZelfAI sent this push
1067
+ field :delivered_at, "delivered_at"
1068
+ # true for production data; false for test deliveries
1069
+ field :livemode, "livemode"
1070
+ # Resource the push covers (content or creator) for snapshots; null for event pushes
1071
+ field :resource, "resource"
1072
+ # The subscription's stored filters that scoped this snapshot, using the same query...
1073
+ field :resource_filters, "resource_filters"
1074
+ # manifest: data.files holds downloadable snapshot files
1075
+ field :delivery_mode, "delivery_mode"
1076
+ # The push payload
1077
+ field :data, "data", cast: WebhookData
1078
+ end
1079
+
1080
+ # The WebhookSecret object.
1081
+ class WebhookSecret
1082
+ # Encoded identifier of the webhook secret
1083
+ field :id, "id"
1084
+ # Type of webhook this secret applies to
1085
+ field :kind, "kind"
1086
+ # Non-sensitive prefix of the secret, shown for identification
1087
+ field :secret_prefix, "secret_prefix"
1088
+ # Whether this secret is currently active
1089
+ field :is_active, "is_active"
1090
+ # Whether this is the default secret for the brand and kind
1091
+ field :is_default, "is_default"
1092
+ # Timestamp set once when the row is first created
1093
+ field :created, "created", cast: :time
1094
+ # Timestamp updated automatically on every save
1095
+ field :modified, "modified", cast: :time
1096
+ end
1097
+
1098
+ # The WebhookSecretCreateRequest object.
1099
+ class WebhookSecretCreateRequest
1100
+ # Whether the secret is for snapshot or event webhooks
1101
+ field :kind, "kind"
1102
+ # Set this secret as the default for its kind
1103
+ field :make_default, "make_default"
1104
+ end
1105
+
1106
+ # The WebhookSecretCreated object.
1107
+ class WebhookSecretCreated
1108
+ # Encoded identifier of the webhook secret
1109
+ field :id, "id"
1110
+ # Type of webhook this secret applies to
1111
+ field :kind, "kind"
1112
+ # Non-sensitive prefix of the secret, shown for identification
1113
+ field :secret_prefix, "secret_prefix"
1114
+ # Whether this secret is currently active
1115
+ field :is_active, "is_active"
1116
+ # Whether this is the default secret for the brand and kind
1117
+ field :is_default, "is_default"
1118
+ # Timestamp set once when the row is first created
1119
+ field :created, "created", cast: :time
1120
+ # Timestamp updated automatically on every save
1121
+ field :modified, "modified", cast: :time
1122
+ # Full signing secret, returned only once on creation
1123
+ field :secret, "secret"
1124
+ end
1125
+
1126
+ # The WebhookSubscription object.
1127
+ class WebhookSubscription
1128
+ # Encoded identifier of the webhook subscription
1129
+ field :id, "id"
1130
+ # Type of webhook this subscription delivers
1131
+ field :kind, "kind"
1132
+ # Resource type the subscription is for (content or creator)
1133
+ field :resource, "resource"
1134
+ # Event types the subscription listens for
1135
+ field :event_types, "event_types"
1136
+ # Filters applied to select which resources are delivered
1137
+ field :resource_filters, "resource_filters"
1138
+ # Destination URL where webhook payloads are sent
1139
+ field :url, "url"
1140
+ # Custom HTTP headers to include with each delivery
1141
+ field :custom_headers, "custom_headers"
1142
+ # Hours between snapshot deliveries
1143
+ field :interval_hours, "interval_hours"
1144
+ # Max rows a real snapshot delivers
1145
+ field :max_items, "max_items"
1146
+ # Public prefix of the subscription signing secret
1147
+ field :secret_prefix, "secret_prefix"
1148
+ # Whether this subscription is active and will be dispatched
1149
+ field :enabled, "enabled"
1150
+ # When this subscription last dispatched a delivery
1151
+ field :last_run_at, "last_run_at", cast: :time
1152
+ # Outcome status of the most recent delivery
1153
+ field :last_status, "last_status"
1154
+ # Timestamp set once when the row is first created
1155
+ field :created, "created", cast: :time
1156
+ # Timestamp updated automatically on every save
1157
+ field :modified, "modified", cast: :time
1158
+ end
1159
+
1160
+ # The WebhookSubscriptionCreateRequest object.
1161
+ class WebhookSubscriptionCreateRequest
1162
+ # Whether the subscription is snapshot or event based
1163
+ field :kind, "kind"
1164
+ # Resource type for snapshot subscriptions
1165
+ field :resource, "resource"
1166
+ # Event names the subscription listens for
1167
+ field :event_types, "event_types"
1168
+ # Filters that scope which resources are delivered
1169
+ field :resource_filters, "resource_filters"
1170
+ # Destination URL where webhook payloads are sent
1171
+ field :url, "url"
1172
+ # Extra HTTP headers sent with each webhook request
1173
+ field :custom_headers, "custom_headers"
1174
+ # Hours between snapshot deliveries
1175
+ field :interval_hours, "interval_hours"
1176
+ # Maximum number of items per delivery
1177
+ field :max_items, "max_items"
1178
+ # Type of signing secret to attach to the subscription
1179
+ field :secret_type, "secret_type"
1180
+ end
1181
+
1182
+ # The WebhookSubscriptionCreated object.
1183
+ class WebhookSubscriptionCreated
1184
+ # Encoded identifier of the webhook subscription
1185
+ field :id, "id"
1186
+ # Type of webhook this subscription delivers
1187
+ field :kind, "kind"
1188
+ # Resource type the subscription is for (content or creator)
1189
+ field :resource, "resource"
1190
+ # Event types the subscription listens for
1191
+ field :event_types, "event_types"
1192
+ # Filters applied to select which resources are delivered
1193
+ field :resource_filters, "resource_filters"
1194
+ # Destination URL where webhook payloads are sent
1195
+ field :url, "url"
1196
+ # Custom HTTP headers to include with each delivery
1197
+ field :custom_headers, "custom_headers"
1198
+ # Hours between snapshot deliveries
1199
+ field :interval_hours, "interval_hours"
1200
+ # Max rows a real snapshot delivers
1201
+ field :max_items, "max_items"
1202
+ # Public prefix of the subscription signing secret
1203
+ field :secret_prefix, "secret_prefix"
1204
+ # Full signing secret, returned only once, at the moment it is minted
1205
+ field :secret, "secret"
1206
+ # Whether this subscription is active and will be dispatched
1207
+ field :enabled, "enabled"
1208
+ # Timestamp set once when the row is first created
1209
+ field :created, "created", cast: :time
1210
+ end
1211
+
1212
+ end
1213
+ end