@waldofyi/sdk 0.1.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.

Potentially problematic release.


This version of @waldofyi/sdk might be problematic. Click here for more details.

Files changed (67) hide show
  1. package/LICENSE +40 -0
  2. package/README.md +37 -0
  3. package/dist/client/client.gen.d.ts +3 -0
  4. package/dist/client/client.gen.d.ts.map +1 -0
  5. package/dist/client/client.gen.js +218 -0
  6. package/dist/client/client.gen.js.map +1 -0
  7. package/dist/client/index.d.ts +11 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +7 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/types.gen.d.ts +121 -0
  12. package/dist/client/types.gen.d.ts.map +1 -0
  13. package/dist/client/types.gen.js +3 -0
  14. package/dist/client/types.gen.js.map +1 -0
  15. package/dist/client/utils.gen.d.ts +38 -0
  16. package/dist/client/utils.gen.d.ts.map +1 -0
  17. package/dist/client/utils.gen.js +232 -0
  18. package/dist/client/utils.gen.js.map +1 -0
  19. package/dist/client.gen.d.ts +13 -0
  20. package/dist/client.gen.d.ts.map +1 -0
  21. package/dist/client.gen.js +4 -0
  22. package/dist/client.gen.js.map +1 -0
  23. package/dist/core/auth.gen.d.ts +26 -0
  24. package/dist/core/auth.gen.d.ts.map +1 -0
  25. package/dist/core/auth.gen.js +15 -0
  26. package/dist/core/auth.gen.js.map +1 -0
  27. package/dist/core/bodySerializer.gen.d.ts +26 -0
  28. package/dist/core/bodySerializer.gen.d.ts.map +1 -0
  29. package/dist/core/bodySerializer.gen.js +58 -0
  30. package/dist/core/bodySerializer.gen.js.map +1 -0
  31. package/dist/core/params.gen.d.ts +44 -0
  32. package/dist/core/params.gen.d.ts.map +1 -0
  33. package/dist/core/params.gen.js +113 -0
  34. package/dist/core/params.gen.js.map +1 -0
  35. package/dist/core/pathSerializer.gen.d.ts +34 -0
  36. package/dist/core/pathSerializer.gen.d.ts.map +1 -0
  37. package/dist/core/pathSerializer.gen.js +115 -0
  38. package/dist/core/pathSerializer.gen.js.map +1 -0
  39. package/dist/core/queryKeySerializer.gen.d.ts +19 -0
  40. package/dist/core/queryKeySerializer.gen.d.ts.map +1 -0
  41. package/dist/core/queryKeySerializer.gen.js +100 -0
  42. package/dist/core/queryKeySerializer.gen.js.map +1 -0
  43. package/dist/core/serverSentEvents.gen.d.ts +72 -0
  44. package/dist/core/serverSentEvents.gen.d.ts.map +1 -0
  45. package/dist/core/serverSentEvents.gen.js +137 -0
  46. package/dist/core/serverSentEvents.gen.js.map +1 -0
  47. package/dist/core/types.gen.d.ts +84 -0
  48. package/dist/core/types.gen.d.ts.map +1 -0
  49. package/dist/core/types.gen.js +3 -0
  50. package/dist/core/types.gen.js.map +1 -0
  51. package/dist/core/utils.gen.d.ts +20 -0
  52. package/dist/core/utils.gen.d.ts.map +1 -0
  53. package/dist/core/utils.gen.js +88 -0
  54. package/dist/core/utils.gen.js.map +1 -0
  55. package/dist/index.d.ts +4 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +4 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/sdk.gen.d.ts +408 -0
  60. package/dist/sdk.gen.d.ts.map +1 -0
  61. package/dist/sdk.gen.js +455 -0
  62. package/dist/sdk.gen.js.map +1 -0
  63. package/dist/types.gen.d.ts +2701 -0
  64. package/dist/types.gen.d.ts.map +1 -0
  65. package/dist/types.gen.js +3 -0
  66. package/dist/types.gen.js.map +1 -0
  67. package/package.json +49 -0
@@ -0,0 +1,2701 @@
1
+ export type ClientOptions = {
2
+ baseUrl: "https://data.waldo.fyi" | (string & {});
3
+ };
4
+ export type TeamFlagRow = {
5
+ name: string;
6
+ enabled: boolean;
7
+ updatedAt: string;
8
+ };
9
+ export type AdminTeamRow = {
10
+ teamId: number;
11
+ name: string;
12
+ slug: string;
13
+ billable: boolean;
14
+ createdAt: string;
15
+ updatedAt: string;
16
+ teamMemberCount: number;
17
+ agentCount: number;
18
+ creditsUsed: number | null;
19
+ creditsLimit: number | null;
20
+ creditsAvailable: number | null;
21
+ subscriptionName: string | null;
22
+ subscriptionStatus: string | null;
23
+ availableTokens: number;
24
+ redeemedTokens: number;
25
+ totalTokens: number;
26
+ };
27
+ export type AccountUsage = {
28
+ period: {
29
+ start: string;
30
+ end: string;
31
+ };
32
+ total_calls: number;
33
+ by_domain: Array<{
34
+ domain: string;
35
+ calls: number;
36
+ }>;
37
+ };
38
+ export type AccountBalance = {
39
+ /**
40
+ * Credits remaining in the current period.
41
+ */
42
+ balance: number;
43
+ used: number;
44
+ limit: number;
45
+ plan: string | null;
46
+ status: string | null;
47
+ period: {
48
+ start: string | null;
49
+ end: string | null;
50
+ days_remaining: number | null;
51
+ };
52
+ };
53
+ export type AccountProfile = {
54
+ account_id: string;
55
+ email: string | null;
56
+ entities: {
57
+ brands: number;
58
+ categories: number;
59
+ audiences: number;
60
+ };
61
+ requests_this_month: number;
62
+ };
63
+ export type SearchResult = {
64
+ id: string;
65
+ brand_id: string | null;
66
+ brand_name: string | null;
67
+ platform: string;
68
+ ownership: string;
69
+ text: string | null;
70
+ url: string | null;
71
+ posted_at: string | null;
72
+ fetched_at: string;
73
+ source_type: string | null;
74
+ sentiment_polarity: string | null;
75
+ rank: number;
76
+ };
77
+ export type RedditSubredditDetails = {
78
+ id: string;
79
+ name: string;
80
+ prefixedName: string;
81
+ title?: string;
82
+ description?: string;
83
+ publicDescriptionText?: string;
84
+ subscribersCount?: number;
85
+ activeCount?: number;
86
+ createdAt?: string;
87
+ type?: string;
88
+ path?: string;
89
+ isNsfw?: boolean;
90
+ wikiPageStatus?: string;
91
+ wikiEditMode?: string;
92
+ icon?: string | null;
93
+ banner?: string | null;
94
+ taxonomyTopics?: Array<{
95
+ id: string;
96
+ displayName: string;
97
+ displayCopy: string;
98
+ }>;
99
+ };
100
+ export type RedditComment = {
101
+ id: string;
102
+ name: string;
103
+ createdAt: string;
104
+ contentPreview: string;
105
+ upvote: number;
106
+ postInfo: {
107
+ id: string;
108
+ title: string;
109
+ type: string;
110
+ prefixedName: string;
111
+ };
112
+ };
113
+ export type NormalizedPost = {
114
+ type: "post";
115
+ /**
116
+ * Opaque post token — pass to /v1/posts/{post_id} to enrich.
117
+ */
118
+ post_id: string;
119
+ platform: {
120
+ source: string;
121
+ name: string;
122
+ id: string;
123
+ url?: string;
124
+ };
125
+ publishedAt?: string;
126
+ content: {
127
+ title?: string;
128
+ text?: string;
129
+ author: {
130
+ id: string;
131
+ username: string;
132
+ name?: string;
133
+ profileUrl?: string;
134
+ profilePicture?: string;
135
+ };
136
+ media?: Array<{
137
+ type: "image" | "video";
138
+ url: string;
139
+ thumbnail?: string;
140
+ }>;
141
+ metrics?: {
142
+ likes?: number;
143
+ comments?: number;
144
+ shares?: number;
145
+ views?: number;
146
+ saves?: number;
147
+ };
148
+ };
149
+ };
150
+ export type MentionsSummary = {
151
+ brand_id: string;
152
+ total_mentions: number;
153
+ mentions_per_day: number;
154
+ by_source: Array<{
155
+ source_type: "SOCIAL" | "NEWS";
156
+ count: number;
157
+ }>;
158
+ /**
159
+ * Polarity buckets over the window. `count` is the row count per bucket; `percentage` is the share of labeled mentions in that bucket (0–100, one decimal). Rows with NULL sentiment (not yet analyzed) are excluded — bucket counts sum to the labeled total, not total_mentions. When no rows are labeled in the window, all percentages are 0.
160
+ */
161
+ sentiment_distribution: {
162
+ positive: {
163
+ count: number;
164
+ percentage: number;
165
+ };
166
+ neutral: {
167
+ count: number;
168
+ percentage: number;
169
+ };
170
+ negative: {
171
+ count: number;
172
+ percentage: number;
173
+ };
174
+ mixed: {
175
+ count: number;
176
+ percentage: number;
177
+ };
178
+ };
179
+ period: {
180
+ start: string;
181
+ end: string;
182
+ };
183
+ };
184
+ export type Mention = {
185
+ id: string;
186
+ brand_id: string;
187
+ /**
188
+ * Source category derived from the platform: SOCIAL for social platforms, NEWS for web articles.
189
+ */
190
+ source_type: "SOCIAL" | "NEWS" | null;
191
+ source_platform: string | null;
192
+ /**
193
+ * Same shape as owned-media post authors
194
+ */
195
+ author: {
196
+ handle: string | null;
197
+ name: string | null;
198
+ };
199
+ text: string | null;
200
+ url: string | null;
201
+ /**
202
+ * Polarity label written by the brand-post analyzer. Null on rows not yet analyzed (existing mentions collected before sentiment classification was wired stay null until re-analyzed).
203
+ */
204
+ sentiment_polarity: "POSITIVE" | "NEGATIVE" | "NEUTRAL" | "MIXED" | null;
205
+ /**
206
+ * Intensity bucket paired with sentiment_polarity; null until analyzed.
207
+ */
208
+ sentiment_intensity: "LOW" | "MEDIUM" | "HIGH" | null;
209
+ posted_at: string | null;
210
+ fetched_at: string;
211
+ /**
212
+ * First-seen-in-Waldo timestamp (alias of fetched_at — the column the post was inserted with).
213
+ */
214
+ discovered_at: string;
215
+ };
216
+ export type PaidMediaSummary = {
217
+ brand_id: string;
218
+ total_ads: number;
219
+ active_ads: number;
220
+ /**
221
+ * Ads whose start_date falls inside the summary window.
222
+ */
223
+ new_ads_in_period: number;
224
+ /**
225
+ * new_ads_in_period divided by days in the window.
226
+ */
227
+ avg_new_ads_per_day: number;
228
+ /**
229
+ * Mean run length (end_date − start_date) in days over ads with both dates. Null when no ad in the window has both dates.
230
+ */
231
+ avg_days_running: number | null;
232
+ /**
233
+ * Sum of estimated ad spend over the window. Null when no spend source is available (the absence of data, as distinct from a confirmed $0).
234
+ */
235
+ estimated_total_spend: number | null;
236
+ by_platform: Array<{
237
+ platform: string;
238
+ ads: number;
239
+ /**
240
+ * Alias of `ads` — prefer this name; `ads` is retained for backward compatibility.
241
+ */
242
+ ad_count: number;
243
+ active: number;
244
+ /**
245
+ * Estimated spend for this platform. Null when no spend source is available.
246
+ */
247
+ estimated_spend: number | null;
248
+ }>;
249
+ period: {
250
+ start: string;
251
+ end: string;
252
+ };
253
+ };
254
+ export type AdLandingPage = {
255
+ ad_id: string;
256
+ /**
257
+ * Normalized destination URL the ad clicks through to (click-tracking params stripped). Null only when the ad carried no landing-page URL.
258
+ */
259
+ url: string | null;
260
+ /**
261
+ * Public Waldo file URL for the full-page screenshot. Null when no capture was taken (see skip_reason).
262
+ */
263
+ screenshot_url: string | null;
264
+ /**
265
+ * When the screenshot was captured (ISO 8601). Null on skip.
266
+ */
267
+ captured_at: string | null;
268
+ /**
269
+ * Why no screenshot was taken — NO_URL (ad had no destination), UNRESOLVED_MACRO (URL carried literal {{...}} macros), APP_STORE (app-install link), or HOMEPAGE (bare advertiser homepage, not a campaign LP). Null on a real capture.
270
+ */
271
+ skip_reason: "NO_URL" | "UNRESOLVED_MACRO" | "APP_STORE" | "HOMEPAGE" | null;
272
+ };
273
+ export type Ad = {
274
+ ad_id: string;
275
+ brand_id: string;
276
+ platform: string;
277
+ title: string | null;
278
+ body: string | null;
279
+ media_urls: Array<string> | null;
280
+ targeting: {
281
+ [key: string]: unknown;
282
+ };
283
+ /**
284
+ * CTA captured verbatim from the ad platform at ingest (the platform's own button text/type/URL), as opposed to the analyzer-derived `cta`/`cta_text`. Null when the platform provides none (Google ads, LinkedIn text/InMail ads).
285
+ */
286
+ source_cta: {
287
+ text?: string;
288
+ type?: string;
289
+ url?: string;
290
+ } | null;
291
+ /**
292
+ * Analyzer-derived CTA type. Null on rows not yet analyzed or with no CTA.
293
+ */
294
+ cta: "shop_now" | "learn_more" | "sign_up" | "download" | "watch_more" | "contact" | "subscribe" | "book" | "install" | "other" | null;
295
+ /**
296
+ * Analyzer-derived literal CTA button/link label.
297
+ */
298
+ cta_text: string | null;
299
+ /**
300
+ * Text burned into the creative itself (overlays, end-cards, price/button labels), transcribed verbatim in reading order — distinct from `title`/`body` (the platform caption/headline). Null for text-only ads with no media pass, and on rows not yet analyzed.
301
+ */
302
+ on_screen_text: string | null;
303
+ promotion: AdPromotion;
304
+ currency: string;
305
+ status: string;
306
+ start_date: string | null;
307
+ end_date: string | null;
308
+ /**
309
+ * Ad destination URL. Sourced from the platform CTA URL (source_cta.url) — populated for Meta ads that carry one; null for Google/LinkedIn until the collector captures a dedicated landing-page URL.
310
+ */
311
+ landing_page_url: string | null;
312
+ /**
313
+ * Days the ad has been running: today − start_date while live, frozen at end_date once it has passed. Null until start_date is populated.
314
+ */
315
+ days_running: number | null;
316
+ region: string | null;
317
+ /**
318
+ * Video duration in seconds for video creatives, read at collection time via a container-level media probe. Null for image-only ads, when the probe failed, or on rows collected before the probe was wired.
319
+ */
320
+ length_seconds: number | null;
321
+ analysis: AdAnalysis;
322
+ fetched_at: string;
323
+ };
324
+ /**
325
+ * Analyzer enrichment (tone, target aspect, entities, audiences, etc.). Null on rows that have not yet been analyzed.
326
+ */
327
+ export type AdAnalysis = {
328
+ tone: "aspirational" | "defensive" | "comedic" | "urgent" | "educational" | "celebratory" | "promotional" | "informational" | "emotional" | null;
329
+ target_aspect: string | null;
330
+ hook: string | null;
331
+ angle: string | null;
332
+ offers: Array<AdAnalysisOffer>;
333
+ topic_tags: Array<string>;
334
+ entities: Array<AdAnalysisEntity>;
335
+ brands: Array<string>;
336
+ audiences: Array<string>;
337
+ industries: Array<string>;
338
+ analyzed_at: string | null;
339
+ } | null;
340
+ export type AdAnalysisEntity = {
341
+ type: string;
342
+ value: string;
343
+ };
344
+ export type AdAnalysisOffer = {
345
+ type: string;
346
+ value?: string;
347
+ };
348
+ /**
349
+ * Structured offer extracted by the analyzer. Null when the ad carries no promotion or has not been analyzed yet.
350
+ */
351
+ export type AdPromotion = {
352
+ is_promotional: boolean;
353
+ /**
354
+ * Open string (not an enum). Common values: percentage_off, dollar_off, free_trial, free_shipping, free_gift, bogo, bundle, clearance, sitewide_sale. May be null even when is_promotional is true.
355
+ */
356
+ discount_type: string | null;
357
+ discount_value: string | null;
358
+ discount_unit: string | null;
359
+ discount_text: string | null;
360
+ promo_code: string | null;
361
+ conditions: string | null;
362
+ expires_at: string | null;
363
+ confidence: number | null;
364
+ } | null;
365
+ export type OwnedMediaSummary = {
366
+ brand_id: string;
367
+ total_posts: number;
368
+ avg_posts_per_day: number;
369
+ by_platform: Array<{
370
+ platform: string;
371
+ posts: number;
372
+ avg_posts_per_day: number;
373
+ }>;
374
+ top_themes: Array<{
375
+ theme: string;
376
+ frequency: number;
377
+ }>;
378
+ sentiment_distribution: {
379
+ positive: number;
380
+ neutral: number;
381
+ negative: number;
382
+ mixed: number;
383
+ };
384
+ period: {
385
+ start: string;
386
+ end: string;
387
+ };
388
+ };
389
+ export type PostDetail = Post & {
390
+ metadata: PostMetadata;
391
+ };
392
+ export type PostMetadata = {
393
+ /**
394
+ * Bucket derived from media_urls extensions: image, video, mixed, or null when there are no URLs or none can be classified.
395
+ */
396
+ media_type: "image" | "video" | "mixed" | null;
397
+ /**
398
+ * ISO 639-1 code detected from `text` via a deterministic library. Null for empty, too-short, or undetermined input.
399
+ */
400
+ language: string | null;
401
+ /**
402
+ * ASR/caption transcript of the post's video or audio. Null when the post has no transcribable media or transcription hasn't run.
403
+ */
404
+ transcript: string | null;
405
+ /**
406
+ * Co-authors the brand co-published this post with (the `author` stays the brand); sourced from Instagram `coauthor_producers`. Present only on collaborative posts — its absence is the not-a-collab signal (no boolean is stored). An `invited_collaborators` sibling may be added later.
407
+ */
408
+ collaborators?: Array<{
409
+ handle: string | null;
410
+ name: string | null;
411
+ }>;
412
+ };
413
+ export type Post = {
414
+ id: string;
415
+ brand_id: string | null;
416
+ platform: string;
417
+ posted_at: string | null;
418
+ text: string | null;
419
+ media_urls: Array<string> | null;
420
+ media_count: number;
421
+ /**
422
+ * Derived from post text when the collected column is empty; values are tag names without the # prefix
423
+ */
424
+ hashtags: Array<string>;
425
+ url: string | null;
426
+ /**
427
+ * Market region of the source profile that published the post (e.g. "us"). Null on rows collected before region stamping. Filter the list endpoint with ?region=.
428
+ */
429
+ region: string | null;
430
+ author: {
431
+ handle: string | null;
432
+ name: string | null;
433
+ };
434
+ /**
435
+ * Like/reaction count. Populated on every platform except YouTube; null where unavailable.
436
+ */
437
+ likes: number | null;
438
+ /**
439
+ * Comment/reply count. Same platform coverage as likes.
440
+ */
441
+ comments: number | null;
442
+ /**
443
+ * Share/repost count. Populated on TikTok/Facebook/LinkedIn/Twitter; null on Instagram and YouTube.
444
+ */
445
+ shares: number | null;
446
+ /**
447
+ * Video/post view count. Populated on TikTok/YouTube/Twitter and most Instagram; null on Facebook and LinkedIn.
448
+ */
449
+ views: number | null;
450
+ analysis: PostAnalysis;
451
+ fetched_at: string;
452
+ };
453
+ /**
454
+ * Analyzer enrichment (tone, topic tags, entities, audiences, etc.). Null on rows that have not yet been analyzed.
455
+ */
456
+ export type PostAnalysis = {
457
+ tone: "aspirational" | "authoritative" | "celebratory" | "comedic" | "defensive" | "educational" | "informational" | "promotional" | "urgent" | null;
458
+ hook: string | null;
459
+ angle: string | null;
460
+ topic_tags: Array<string>;
461
+ entities: Array<PostAnalysisEntity>;
462
+ brands: Array<string>;
463
+ audiences: Array<string>;
464
+ industries: Array<string>;
465
+ analyzed_at: string | null;
466
+ } | null;
467
+ export type PostAnalysisEntity = {
468
+ type: string;
469
+ value: string;
470
+ };
471
+ export type Platform = {
472
+ platform: string;
473
+ handle: string | null;
474
+ url: string | null;
475
+ followers: number | null;
476
+ follower_growth_30d: number | null;
477
+ avg_engagement_rate: number | null;
478
+ last_synced: string | null;
479
+ /**
480
+ * Whether the daily collectors pull ads/posts from this identity. Disabled identities stay registered for reference but are skipped during collection.
481
+ */
482
+ collection_enabled: boolean;
483
+ };
484
+ export type Timeseries = {
485
+ brand_id: string;
486
+ metric: string;
487
+ grain: string;
488
+ series: Array<{
489
+ period_start: string;
490
+ value: number;
491
+ }>;
492
+ deltas_vs_prior_window: {
493
+ total: number | null;
494
+ avg_per_period: number;
495
+ };
496
+ };
497
+ export type BrandDetail = BrandSummary & {
498
+ founded: number | null;
499
+ headquarters: string | null;
500
+ logo_url: string | null;
501
+ };
502
+ export type BrandSummary = {
503
+ id: string;
504
+ name: string;
505
+ /**
506
+ * Flat list of taxonomy nodes this brand is associated with. Subcategories carry parent_id/parent_name; top-level categories have null parent refs.
507
+ */
508
+ categories: Array<BrandCategory>;
509
+ description: string | null;
510
+ audience_ids: Array<string>;
511
+ platform_count: number;
512
+ primary_region: string;
513
+ regions_tracked: Array<string>;
514
+ };
515
+ export type BrandCategory = {
516
+ id: string;
517
+ name: string;
518
+ parent_id: string | null;
519
+ parent_name: string | null;
520
+ };
521
+ export type BrandComparison = {
522
+ brand_id: string;
523
+ name: string;
524
+ owned_posts_30d: number;
525
+ mention_volume_30d: number;
526
+ avg_sentiment_30d: number | null;
527
+ ad_count_30d: number;
528
+ };
529
+ export type Meta = {
530
+ request_id: string;
531
+ /**
532
+ * Total number of items matching the request, across all pages. Omitted when no total is available for the endpoint — absence means unknown, not zero.
533
+ */
534
+ total?: number;
535
+ /**
536
+ * ceil(total / limit). Present exactly when total is; paginate via next_cursor regardless.
537
+ */
538
+ total_pages?: number;
539
+ next_cursor?: string | null;
540
+ };
541
+ export type UsageResponse = {
542
+ team: {
543
+ id: number;
544
+ name: string | null;
545
+ };
546
+ /**
547
+ * Per-bucket consumption state, keyed by bucket name (`VENDOR`, `DEFAULT`).
548
+ */
549
+ buckets: {
550
+ [key: string]: RateLimitBucketState;
551
+ };
552
+ /**
553
+ * Which operations consume from each bucket. Derived live from the registry.
554
+ */
555
+ operationsByBucket: {
556
+ [key: string]: Array<string>;
557
+ };
558
+ };
559
+ export type RateLimitBucketState = {
560
+ /**
561
+ * Bucket state. `UNTHROTTLED`: bucket disabled, no cap applies. `UNAVAILABLE`: Redis-backed state could not be read (fail-open in effect — back off as if rate-limited). `AVAILABLE`: live state, `remaining` and `resetMs` are numbers.
562
+ */
563
+ status: "UNTHROTTLED" | "UNAVAILABLE" | "AVAILABLE";
564
+ requestsPerSecond: number;
565
+ burstAllowance: number;
566
+ enabled: boolean;
567
+ /**
568
+ * Tokens remaining in the bucket. `null` only when `status` is `UNTHROTTLED` or `UNAVAILABLE`.
569
+ */
570
+ remaining: number | null;
571
+ /**
572
+ * Milliseconds until the bucket fully refills. `null` only when `status` is `UNTHROTTLED` or `UNAVAILABLE`.
573
+ */
574
+ resetMs: number | null;
575
+ };
576
+ export type ApiKeyCreated = {
577
+ /**
578
+ * The raw key. Returned in plaintext exactly once — store it securely; it cannot be retrieved later.
579
+ */
580
+ apiKey: string;
581
+ keyId: string;
582
+ expiresAt: string | null;
583
+ };
584
+ export type ApiKeyMetadata = {
585
+ apiKeyId: string;
586
+ /**
587
+ * User who minted the key (keys are team-scoped; this is provenance)
588
+ */
589
+ userId: number;
590
+ name: string;
591
+ /**
592
+ * Minting provenance (MCP, REST, or OAUTH) — all key types authenticate identically.
593
+ */
594
+ type: string;
595
+ createdAt: string;
596
+ expiresAt: string | null;
597
+ lastUsedAt: string | null;
598
+ revokedAt: string | null;
599
+ status: "ACTIVE" | "REVOKED" | "EXPIRED";
600
+ };
601
+ /**
602
+ * Execution detail. Summary form (default) carries status, final output, and key metadata; pass full=true for the complete row including the messages array.
603
+ */
604
+ export type ExecutionDetail = {
605
+ [key: string]: unknown;
606
+ };
607
+ export type ExecutionSummary = {
608
+ agentExecutionId: string;
609
+ agentId: string | null;
610
+ status: string;
611
+ spaceId: string | null;
612
+ totalTokens: number | null;
613
+ creditsUsed: number | null;
614
+ createdAt: string;
615
+ updatedAt: string;
616
+ };
617
+ /**
618
+ * Full run row, including variables and linkage IDs (spaceId, scheduledSequenceId, conversationId, etc.).
619
+ */
620
+ export type RunDetail = {
621
+ [key: string]: unknown;
622
+ };
623
+ export type RunSummary = {
624
+ runId: string;
625
+ type: string;
626
+ status: string;
627
+ agentId: string | null;
628
+ sequenceId: string | null;
629
+ startedAt: string;
630
+ completedAt: string | null;
631
+ failureReason: string | null;
632
+ };
633
+ export type Error = {
634
+ error: string;
635
+ };
636
+ export type CollectionWindow = {
637
+ windowKey: string;
638
+ period: "DAILY" | "WEEKLY";
639
+ /**
640
+ * Random per-window fraction in [0, 1) added to every schedule's golden-ratio offset, decorrelating windows from each other. Fixed at creation.
641
+ */
642
+ phase: number;
643
+ /**
644
+ * High-water mark for fresh index allocations
645
+ */
646
+ nextIndex: number;
647
+ /**
648
+ * Released indices awaiting reuse
649
+ */
650
+ freeIndices: Array<number>;
651
+ createdAt: string;
652
+ updatedAt: string;
653
+ };
654
+ export type GetV1CollectionWindowsData = {
655
+ body?: never;
656
+ path?: never;
657
+ query?: never;
658
+ url: "/v1/collection-windows";
659
+ };
660
+ export type GetV1CollectionWindowsErrors = {
661
+ /**
662
+ * Admin required
663
+ */
664
+ 403: Error;
665
+ };
666
+ export type GetV1CollectionWindowsError = GetV1CollectionWindowsErrors[keyof GetV1CollectionWindowsErrors];
667
+ export type GetV1CollectionWindowsResponses = {
668
+ /**
669
+ * All collection windows
670
+ */
671
+ 200: {
672
+ data: Array<CollectionWindow>;
673
+ };
674
+ };
675
+ export type GetV1CollectionWindowsResponse = GetV1CollectionWindowsResponses[keyof GetV1CollectionWindowsResponses];
676
+ export type PostV1CollectionWindowsData = {
677
+ body?: {
678
+ /**
679
+ * Opaque UPPERCASE_SNAKE namespace, max 64 chars. Never parsed for cadence.
680
+ */
681
+ windowKey: string;
682
+ /**
683
+ * Span the window's golden-ratio offsets spread over.
684
+ */
685
+ period: "DAILY" | "WEEKLY";
686
+ };
687
+ path?: never;
688
+ query?: never;
689
+ url: "/v1/collection-windows";
690
+ };
691
+ export type PostV1CollectionWindowsErrors = {
692
+ /**
693
+ * Invalid key or period
694
+ */
695
+ 400: Error;
696
+ /**
697
+ * Admin required
698
+ */
699
+ 403: Error;
700
+ };
701
+ export type PostV1CollectionWindowsError = PostV1CollectionWindowsErrors[keyof PostV1CollectionWindowsErrors];
702
+ export type PostV1CollectionWindowsResponses = {
703
+ /**
704
+ * Window created (or already existed)
705
+ */
706
+ 201: {
707
+ data: CollectionWindow;
708
+ created: boolean;
709
+ };
710
+ };
711
+ export type PostV1CollectionWindowsResponse = PostV1CollectionWindowsResponses[keyof PostV1CollectionWindowsResponses];
712
+ export type RunListData = {
713
+ body?: never;
714
+ path?: never;
715
+ query?: {
716
+ /**
717
+ * Filter by run status
718
+ */
719
+ status?: "RUNNING" | "COMPLETED" | "FAILED";
720
+ /**
721
+ * Filter by agent ID
722
+ */
723
+ agentId?: string;
724
+ /**
725
+ * Filter by sequence ID
726
+ */
727
+ sequenceId?: string;
728
+ /**
729
+ * Max results (default 50)
730
+ */
731
+ limit?: number;
732
+ /**
733
+ * Offset for pagination
734
+ */
735
+ offset?: number | null;
736
+ };
737
+ url: "/v1/runs";
738
+ };
739
+ export type RunListResponses = {
740
+ /**
741
+ * Runs, most recent first
742
+ */
743
+ 200: {
744
+ data: Array<RunSummary>;
745
+ };
746
+ };
747
+ export type RunListResponse = RunListResponses[keyof RunListResponses];
748
+ export type RunGetData = {
749
+ body?: never;
750
+ path: {
751
+ runId: string;
752
+ };
753
+ query?: never;
754
+ url: "/v1/runs/{runId}";
755
+ };
756
+ export type RunGetErrors = {
757
+ /**
758
+ * Run not found
759
+ */
760
+ 404: Error;
761
+ };
762
+ export type RunGetError = RunGetErrors[keyof RunGetErrors];
763
+ export type RunGetResponses = {
764
+ /**
765
+ * Run details
766
+ */
767
+ 200: {
768
+ data: RunDetail;
769
+ };
770
+ };
771
+ export type RunGetResponse = RunGetResponses[keyof RunGetResponses];
772
+ export type ExecutionListData = {
773
+ body?: never;
774
+ path?: never;
775
+ query?: {
776
+ /**
777
+ * Filter by run ID
778
+ */
779
+ runId?: string;
780
+ /**
781
+ * Filter by agent ID
782
+ */
783
+ agentId?: string;
784
+ /**
785
+ * Filter by space ID
786
+ */
787
+ spaceId?: string;
788
+ /**
789
+ * Filter by execution status
790
+ */
791
+ status?: string;
792
+ /**
793
+ * Include child executions (default false)
794
+ */
795
+ includeChildren?: "0" | "1" | "true" | "false";
796
+ /**
797
+ * Max results (default 20)
798
+ */
799
+ limit?: number;
800
+ /**
801
+ * Pagination token from a previous response
802
+ */
803
+ cursor?: string;
804
+ };
805
+ url: "/v1/executions";
806
+ };
807
+ export type ExecutionListResponses = {
808
+ /**
809
+ * Executions
810
+ */
811
+ 200: {
812
+ data: Array<ExecutionSummary>;
813
+ /**
814
+ * Pass as `cursor` query param to fetch the next page. Null when no more results.
815
+ */
816
+ nextCursor: string | null;
817
+ /**
818
+ * Whether additional pages of results exist beyond this response.
819
+ */
820
+ hasMore: boolean;
821
+ };
822
+ };
823
+ export type ExecutionListResponse = ExecutionListResponses[keyof ExecutionListResponses];
824
+ export type ExecutionGetData = {
825
+ body?: never;
826
+ path: {
827
+ executionId: string;
828
+ };
829
+ query?: {
830
+ /**
831
+ * Return the complete record including messages (default false)
832
+ */
833
+ full?: "0" | "1" | "true" | "false";
834
+ };
835
+ url: "/v1/executions/{executionId}";
836
+ };
837
+ export type ExecutionGetErrors = {
838
+ /**
839
+ * Execution not found
840
+ */
841
+ 404: Error;
842
+ };
843
+ export type ExecutionGetError = ExecutionGetErrors[keyof ExecutionGetErrors];
844
+ export type ExecutionGetResponses = {
845
+ /**
846
+ * Execution details
847
+ */
848
+ 200: {
849
+ data: ExecutionDetail;
850
+ };
851
+ };
852
+ export type ExecutionGetResponse = ExecutionGetResponses[keyof ExecutionGetResponses];
853
+ export type ApiKeyListData = {
854
+ body?: never;
855
+ path?: never;
856
+ query?: {
857
+ /**
858
+ * Filter by minting provenance
859
+ */
860
+ type?: "MCP" | "REST" | "OAUTH";
861
+ };
862
+ url: "/v1/api-keys";
863
+ };
864
+ export type ApiKeyListErrors = {
865
+ /**
866
+ * No workspace selected
867
+ */
868
+ 400: Error;
869
+ };
870
+ export type ApiKeyListError = ApiKeyListErrors[keyof ApiKeyListErrors];
871
+ export type ApiKeyListResponses = {
872
+ /**
873
+ * API keys for the current workspace
874
+ */
875
+ 200: {
876
+ data: Array<ApiKeyMetadata>;
877
+ };
878
+ };
879
+ export type ApiKeyListResponse = ApiKeyListResponses[keyof ApiKeyListResponses];
880
+ export type ApiKeyCreateData = {
881
+ body?: {
882
+ /**
883
+ * Human-readable label for the key
884
+ */
885
+ name: string;
886
+ /**
887
+ * Optional TTL in days (max 36500); omit for a non-expiring key
888
+ */
889
+ expiresInDays?: number;
890
+ };
891
+ path?: never;
892
+ query?: never;
893
+ url: "/v1/api-keys";
894
+ };
895
+ export type ApiKeyCreateErrors = {
896
+ /**
897
+ * No workspace selected or invalid input
898
+ */
899
+ 400: Error;
900
+ };
901
+ export type ApiKeyCreateError = ApiKeyCreateErrors[keyof ApiKeyCreateErrors];
902
+ export type ApiKeyCreateResponses = {
903
+ /**
904
+ * Key created — the raw key appears only in this response
905
+ */
906
+ 200: {
907
+ data: ApiKeyCreated;
908
+ };
909
+ };
910
+ export type ApiKeyCreateResponse = ApiKeyCreateResponses[keyof ApiKeyCreateResponses];
911
+ export type ApiKeyRevokeData = {
912
+ body?: never;
913
+ path: {
914
+ /**
915
+ * The apiKeyId to revoke (from the list endpoint)
916
+ */
917
+ keyId: string;
918
+ };
919
+ query?: never;
920
+ url: "/v1/api-keys/{keyId}";
921
+ };
922
+ export type ApiKeyRevokeErrors = {
923
+ /**
924
+ * No workspace selected
925
+ */
926
+ 400: Error;
927
+ /**
928
+ * Key not found in the current workspace
929
+ */
930
+ 404: Error;
931
+ };
932
+ export type ApiKeyRevokeError = ApiKeyRevokeErrors[keyof ApiKeyRevokeErrors];
933
+ export type ApiKeyRevokeResponses = {
934
+ /**
935
+ * Key revoked
936
+ */
937
+ 200: {
938
+ data: ApiKeyMetadata;
939
+ };
940
+ };
941
+ export type ApiKeyRevokeResponse = ApiKeyRevokeResponses[keyof ApiKeyRevokeResponses];
942
+ export type GetUsageData = {
943
+ body?: never;
944
+ path?: never;
945
+ query?: never;
946
+ url: "/v1/usage";
947
+ };
948
+ export type GetUsageResponses = {
949
+ /**
950
+ * Per-bucket consumption + operations-by-bucket
951
+ */
952
+ 200: UsageResponse;
953
+ };
954
+ export type GetUsageResponse = GetUsageResponses[keyof GetUsageResponses];
955
+ export type BrandSearchData = {
956
+ body?: never;
957
+ path?: never;
958
+ query?: {
959
+ /**
960
+ * Search query — matches against brand name
961
+ */
962
+ q?: string;
963
+ /**
964
+ * Filter to brands in this category or subcategory (brand_taxonomy id). Matches the category and its direct subcategories.
965
+ */
966
+ category_id?: string;
967
+ /**
968
+ * Maximum number of results to return (1–100)
969
+ */
970
+ limit?: number;
971
+ /**
972
+ * Cursor for pagination — pass meta.next_cursor from the previous response
973
+ */
974
+ cursor?: string;
975
+ };
976
+ url: "/v1/brands/search";
977
+ };
978
+ export type BrandSearchResponses = {
979
+ /**
980
+ * Paginated list of brands
981
+ */
982
+ 200: {
983
+ data: Array<BrandSummary>;
984
+ meta: Meta;
985
+ };
986
+ };
987
+ export type BrandSearchResponse = BrandSearchResponses[keyof BrandSearchResponses];
988
+ export type BrandCompareData = {
989
+ body?: never;
990
+ path?: never;
991
+ query: {
992
+ /**
993
+ * Comma-separated brand UUIDs (max 5)
994
+ */
995
+ brand_ids: string;
996
+ /**
997
+ * Time window for comparison. Defaults to 30d.
998
+ */
999
+ window?: "7d" | "30d" | "90d";
1000
+ };
1001
+ url: "/v1/brands/compare";
1002
+ };
1003
+ export type BrandCompareErrors = {
1004
+ /**
1005
+ * Invalid request
1006
+ */
1007
+ 400: Error;
1008
+ };
1009
+ export type BrandCompareError = BrandCompareErrors[keyof BrandCompareErrors];
1010
+ export type BrandCompareResponses = {
1011
+ /**
1012
+ * Brand comparison results
1013
+ */
1014
+ 200: {
1015
+ data: {
1016
+ comparison: Array<BrandComparison>;
1017
+ period: {
1018
+ start: string;
1019
+ end: string;
1020
+ };
1021
+ };
1022
+ meta: Meta;
1023
+ };
1024
+ };
1025
+ export type BrandCompareResponse = BrandCompareResponses[keyof BrandCompareResponses];
1026
+ export type BrandGetData = {
1027
+ body?: never;
1028
+ path: {
1029
+ /**
1030
+ * Brand ID (UUID)
1031
+ */
1032
+ brand_id: string;
1033
+ };
1034
+ query?: never;
1035
+ url: "/v1/brands/{brand_id}";
1036
+ };
1037
+ export type BrandGetErrors = {
1038
+ /**
1039
+ * Brand not found
1040
+ */
1041
+ 404: Error;
1042
+ };
1043
+ export type BrandGetError = BrandGetErrors[keyof BrandGetErrors];
1044
+ export type BrandGetResponses = {
1045
+ /**
1046
+ * Brand details
1047
+ */
1048
+ 200: {
1049
+ data: BrandDetail;
1050
+ meta: Meta;
1051
+ };
1052
+ };
1053
+ export type BrandGetResponse = BrandGetResponses[keyof BrandGetResponses];
1054
+ export type BrandTimeseriesData = {
1055
+ body?: never;
1056
+ path: {
1057
+ /**
1058
+ * Brand ID (UUID)
1059
+ */
1060
+ brand_id: string;
1061
+ /**
1062
+ * Dataset to query: owned-media, paid-media, mentions, or all
1063
+ */
1064
+ dataset: "owned-media" | "paid-media" | "mentions" | "all";
1065
+ };
1066
+ query: {
1067
+ /**
1068
+ * Metric to chart
1069
+ */
1070
+ metric: "post_count" | "mention_volume" | "ad_count" | "avg_sentiment" | "net_sentiment" | "followers" | "follower_growth";
1071
+ /**
1072
+ * Time grain for bucketing
1073
+ */
1074
+ grain: "day" | "week" | "month";
1075
+ /**
1076
+ * Lookback window: 30d, 90d, 26w, or 12m
1077
+ */
1078
+ window: "30d" | "90d" | "26w" | "12m";
1079
+ /**
1080
+ * Filter/breakout by platform
1081
+ */
1082
+ platform?: string;
1083
+ /**
1084
+ * Filter/breakout by region
1085
+ */
1086
+ region?: string;
1087
+ };
1088
+ url: "/v1/brands/{brand_id}/{dataset}/timeseries";
1089
+ };
1090
+ export type BrandTimeseriesErrors = {
1091
+ /**
1092
+ * Brand not found
1093
+ */
1094
+ 404: Error;
1095
+ };
1096
+ export type BrandTimeseriesError = BrandTimeseriesErrors[keyof BrandTimeseriesErrors];
1097
+ export type BrandTimeseriesResponses = {
1098
+ /**
1099
+ * Timeseries data with deltas vs. prior window
1100
+ */
1101
+ 200: {
1102
+ data: Timeseries;
1103
+ meta: Meta;
1104
+ };
1105
+ };
1106
+ export type BrandTimeseriesResponse = BrandTimeseriesResponses[keyof BrandTimeseriesResponses];
1107
+ export type BrandPlatformsListData = {
1108
+ body?: never;
1109
+ path: {
1110
+ /**
1111
+ * Brand ID (UUID)
1112
+ */
1113
+ brand_id: string;
1114
+ };
1115
+ query?: {
1116
+ /**
1117
+ * Include ad-library identity rows (meta_ads, google_ads, linkedin_ads). Off by default — these drive ad collection and aren't social presence.
1118
+ */
1119
+ include_ad_library?: "0" | "1" | "true" | "false";
1120
+ };
1121
+ url: "/v1/brands/{brand_id}/platforms";
1122
+ };
1123
+ export type BrandPlatformsListErrors = {
1124
+ /**
1125
+ * Brand not found
1126
+ */
1127
+ 404: Error;
1128
+ };
1129
+ export type BrandPlatformsListError = BrandPlatformsListErrors[keyof BrandPlatformsListErrors];
1130
+ export type BrandPlatformsListResponses = {
1131
+ /**
1132
+ * List of platform accounts
1133
+ */
1134
+ 200: {
1135
+ data: Array<Platform>;
1136
+ meta: Meta;
1137
+ };
1138
+ };
1139
+ export type BrandPlatformsListResponse = BrandPlatformsListResponses[keyof BrandPlatformsListResponses];
1140
+ export type BrandPlatformsGetData = {
1141
+ body?: never;
1142
+ path: {
1143
+ /**
1144
+ * Brand ID (UUID)
1145
+ */
1146
+ brand_id: string;
1147
+ /**
1148
+ * Platform name (e.g. instagram, tiktok, twitter)
1149
+ */
1150
+ platform: string;
1151
+ };
1152
+ query?: {
1153
+ /**
1154
+ * Allow resolving ad-library identity rows (meta_ads, google_ads, linkedin_ads). Off by default — these 404 unless opted in.
1155
+ */
1156
+ include_ad_library?: "0" | "1" | "true" | "false";
1157
+ };
1158
+ url: "/v1/brands/{brand_id}/platforms/{platform}";
1159
+ };
1160
+ export type BrandPlatformsGetErrors = {
1161
+ /**
1162
+ * Brand or platform not found
1163
+ */
1164
+ 404: Error;
1165
+ };
1166
+ export type BrandPlatformsGetError = BrandPlatformsGetErrors[keyof BrandPlatformsGetErrors];
1167
+ export type BrandPlatformsGetResponses = {
1168
+ /**
1169
+ * Platform account details
1170
+ */
1171
+ 200: {
1172
+ data: Platform;
1173
+ meta: Meta;
1174
+ };
1175
+ };
1176
+ export type BrandPlatformsGetResponse = BrandPlatformsGetResponses[keyof BrandPlatformsGetResponses];
1177
+ export type BrandOwnedMediaPostsListData = {
1178
+ body?: never;
1179
+ path: {
1180
+ /**
1181
+ * Brand ID (UUID)
1182
+ */
1183
+ brand_id: string;
1184
+ };
1185
+ query?: {
1186
+ /**
1187
+ * Filter to a single platform (e.g. instagram, tiktok, twitter). Mutually exclusive with exclude_platform.
1188
+ */
1189
+ platform?: string;
1190
+ /**
1191
+ * Exclude a single platform from the results (e.g. facebook). Mutually exclusive with platform.
1192
+ */
1193
+ exclude_platform?: string;
1194
+ /**
1195
+ * Filter posts on or after this date (ISO 8601)
1196
+ */
1197
+ start_date?: string;
1198
+ /**
1199
+ * Filter posts on or before this date (ISO 8601)
1200
+ */
1201
+ end_date?: string;
1202
+ /**
1203
+ * Filter by region
1204
+ */
1205
+ region?: string;
1206
+ /**
1207
+ * Order results by posted_at (default, recency) or a raw engagement metric: likes, comments, shares, or views. Posts missing the chosen metric sort last.
1208
+ */
1209
+ sort?: "posted_at" | "likes" | "comments" | "shares" | "views";
1210
+ /**
1211
+ * Sort direction: desc (default) or asc.
1212
+ */
1213
+ order?: "asc" | "desc";
1214
+ /**
1215
+ * Maximum number of results to return (1–100)
1216
+ */
1217
+ limit?: number;
1218
+ /**
1219
+ * Cursor for pagination — pass meta.next_cursor from the previous response
1220
+ */
1221
+ cursor?: string;
1222
+ };
1223
+ url: "/v1/brands/{brand_id}/owned-media/posts";
1224
+ };
1225
+ export type BrandOwnedMediaPostsListErrors = {
1226
+ /**
1227
+ * Brand not found
1228
+ */
1229
+ 404: Error;
1230
+ };
1231
+ export type BrandOwnedMediaPostsListError = BrandOwnedMediaPostsListErrors[keyof BrandOwnedMediaPostsListErrors];
1232
+ export type BrandOwnedMediaPostsListResponses = {
1233
+ /**
1234
+ * Paginated list of owned posts
1235
+ */
1236
+ 200: {
1237
+ data: Array<Post>;
1238
+ meta: Meta;
1239
+ };
1240
+ };
1241
+ export type BrandOwnedMediaPostsListResponse = BrandOwnedMediaPostsListResponses[keyof BrandOwnedMediaPostsListResponses];
1242
+ export type BrandOwnedMediaPostsGetData = {
1243
+ body?: never;
1244
+ path: {
1245
+ /**
1246
+ * Brand ID (UUID)
1247
+ */
1248
+ brand_id: string;
1249
+ /**
1250
+ * Post ID (UUID)
1251
+ */
1252
+ post_id: string;
1253
+ };
1254
+ query?: never;
1255
+ url: "/v1/brands/{brand_id}/owned-media/posts/{post_id}";
1256
+ };
1257
+ export type BrandOwnedMediaPostsGetErrors = {
1258
+ /**
1259
+ * Brand or post not found
1260
+ */
1261
+ 404: Error;
1262
+ };
1263
+ export type BrandOwnedMediaPostsGetError = BrandOwnedMediaPostsGetErrors[keyof BrandOwnedMediaPostsGetErrors];
1264
+ export type BrandOwnedMediaPostsGetResponses = {
1265
+ /**
1266
+ * Post details
1267
+ */
1268
+ 200: {
1269
+ data: PostDetail;
1270
+ meta: Meta;
1271
+ };
1272
+ };
1273
+ export type BrandOwnedMediaPostsGetResponse = BrandOwnedMediaPostsGetResponses[keyof BrandOwnedMediaPostsGetResponses];
1274
+ export type BrandOwnedMediaSummaryData = {
1275
+ body?: never;
1276
+ path: {
1277
+ /**
1278
+ * Brand ID (UUID)
1279
+ */
1280
+ brand_id: string;
1281
+ };
1282
+ query?: {
1283
+ /**
1284
+ * Start of date range (ISO 8601). Defaults to 30 days ago.
1285
+ */
1286
+ start_date?: string;
1287
+ /**
1288
+ * End of date range (ISO 8601). Defaults to now.
1289
+ */
1290
+ end_date?: string;
1291
+ /**
1292
+ * Filter by region (e.g. "us"). Matches the list endpoint's region filter so the summary totals stay consistent with a region-scoped list.
1293
+ */
1294
+ region?: string;
1295
+ };
1296
+ url: "/v1/brands/{brand_id}/owned-media/summary";
1297
+ };
1298
+ export type BrandOwnedMediaSummaryErrors = {
1299
+ /**
1300
+ * Brand not found
1301
+ */
1302
+ 404: Error;
1303
+ };
1304
+ export type BrandOwnedMediaSummaryError = BrandOwnedMediaSummaryErrors[keyof BrandOwnedMediaSummaryErrors];
1305
+ export type BrandOwnedMediaSummaryResponses = {
1306
+ /**
1307
+ * Owned media summary
1308
+ */
1309
+ 200: {
1310
+ data: OwnedMediaSummary;
1311
+ meta: Meta;
1312
+ };
1313
+ };
1314
+ export type BrandOwnedMediaSummaryResponse = BrandOwnedMediaSummaryResponses[keyof BrandOwnedMediaSummaryResponses];
1315
+ export type BrandPaidMediaAdsListData = {
1316
+ body?: never;
1317
+ path: {
1318
+ /**
1319
+ * Brand ID (UUID)
1320
+ */
1321
+ brand_id: string;
1322
+ };
1323
+ query?: {
1324
+ /**
1325
+ * Filter by ad platform (e.g. meta, google, tiktok)
1326
+ */
1327
+ platform?: string;
1328
+ /**
1329
+ * Filter by ad status (ACTIVE or ENDED)
1330
+ */
1331
+ status?: "ACTIVE" | "ENDED";
1332
+ /**
1333
+ * Maximum number of results to return (1–100)
1334
+ */
1335
+ limit?: number;
1336
+ /**
1337
+ * Cursor for pagination — pass meta.next_cursor from the previous response
1338
+ */
1339
+ cursor?: string;
1340
+ };
1341
+ url: "/v1/brands/{brand_id}/paid-media/ads";
1342
+ };
1343
+ export type BrandPaidMediaAdsListErrors = {
1344
+ /**
1345
+ * Brand not found
1346
+ */
1347
+ 404: Error;
1348
+ };
1349
+ export type BrandPaidMediaAdsListError = BrandPaidMediaAdsListErrors[keyof BrandPaidMediaAdsListErrors];
1350
+ export type BrandPaidMediaAdsListResponses = {
1351
+ /**
1352
+ * Paginated list of ads
1353
+ */
1354
+ 200: {
1355
+ data: Array<Ad>;
1356
+ meta: Meta;
1357
+ };
1358
+ };
1359
+ export type BrandPaidMediaAdsListResponse = BrandPaidMediaAdsListResponses[keyof BrandPaidMediaAdsListResponses];
1360
+ export type BrandPaidMediaAdsGetData = {
1361
+ body?: never;
1362
+ path: {
1363
+ /**
1364
+ * Brand ID (UUID)
1365
+ */
1366
+ brand_id: string;
1367
+ /**
1368
+ * Ad ID (UUID)
1369
+ */
1370
+ ad_id: string;
1371
+ };
1372
+ query?: never;
1373
+ url: "/v1/brands/{brand_id}/paid-media/ads/{ad_id}";
1374
+ };
1375
+ export type BrandPaidMediaAdsGetErrors = {
1376
+ /**
1377
+ * Brand or ad not found
1378
+ */
1379
+ 404: Error;
1380
+ };
1381
+ export type BrandPaidMediaAdsGetError = BrandPaidMediaAdsGetErrors[keyof BrandPaidMediaAdsGetErrors];
1382
+ export type BrandPaidMediaAdsGetResponses = {
1383
+ /**
1384
+ * Ad details
1385
+ */
1386
+ 200: {
1387
+ data: Ad;
1388
+ meta: Meta;
1389
+ };
1390
+ };
1391
+ export type BrandPaidMediaAdsGetResponse = BrandPaidMediaAdsGetResponses[keyof BrandPaidMediaAdsGetResponses];
1392
+ export type BrandPaidMediaAdsLandingPageGetData = {
1393
+ body?: never;
1394
+ path: {
1395
+ /**
1396
+ * Brand ID (UUID)
1397
+ */
1398
+ brand_id: string;
1399
+ /**
1400
+ * Ad ID (UUID)
1401
+ */
1402
+ ad_id: string;
1403
+ };
1404
+ query?: never;
1405
+ url: "/v1/brands/{brand_id}/paid-media/ads/{ad_id}/landing-page";
1406
+ };
1407
+ export type BrandPaidMediaAdsLandingPageGetErrors = {
1408
+ /**
1409
+ * Brand or ad not found
1410
+ */
1411
+ 404: Error;
1412
+ };
1413
+ export type BrandPaidMediaAdsLandingPageGetError = BrandPaidMediaAdsLandingPageGetErrors[keyof BrandPaidMediaAdsLandingPageGetErrors];
1414
+ export type BrandPaidMediaAdsLandingPageGetResponses = {
1415
+ /**
1416
+ * Landing-page snapshot (captured or skipped)
1417
+ */
1418
+ 200: {
1419
+ data: AdLandingPage;
1420
+ meta: Meta;
1421
+ };
1422
+ };
1423
+ export type BrandPaidMediaAdsLandingPageGetResponse = BrandPaidMediaAdsLandingPageGetResponses[keyof BrandPaidMediaAdsLandingPageGetResponses];
1424
+ export type BrandPaidMediaSummaryData = {
1425
+ body?: never;
1426
+ path: {
1427
+ /**
1428
+ * Brand ID (UUID)
1429
+ */
1430
+ brand_id: string;
1431
+ };
1432
+ query?: {
1433
+ /**
1434
+ * Start of date range (ISO 8601). Defaults to 30 days ago.
1435
+ */
1436
+ start_date?: string;
1437
+ /**
1438
+ * End of date range (ISO 8601). Defaults to now.
1439
+ */
1440
+ end_date?: string;
1441
+ };
1442
+ url: "/v1/brands/{brand_id}/paid-media/summary";
1443
+ };
1444
+ export type BrandPaidMediaSummaryErrors = {
1445
+ /**
1446
+ * Brand not found
1447
+ */
1448
+ 404: Error;
1449
+ };
1450
+ export type BrandPaidMediaSummaryError = BrandPaidMediaSummaryErrors[keyof BrandPaidMediaSummaryErrors];
1451
+ export type BrandPaidMediaSummaryResponses = {
1452
+ /**
1453
+ * Paid media summary
1454
+ */
1455
+ 200: {
1456
+ data: PaidMediaSummary;
1457
+ meta: Meta;
1458
+ };
1459
+ };
1460
+ export type BrandPaidMediaSummaryResponse = BrandPaidMediaSummaryResponses[keyof BrandPaidMediaSummaryResponses];
1461
+ export type BrandMentionsListData = {
1462
+ body?: never;
1463
+ path: {
1464
+ /**
1465
+ * Brand ID (UUID)
1466
+ */
1467
+ brand_id: string;
1468
+ };
1469
+ query?: {
1470
+ /**
1471
+ * Filter by source category: SOCIAL (social platforms) or NEWS (web articles)
1472
+ */
1473
+ source_type?: "SOCIAL" | "NEWS";
1474
+ /**
1475
+ * Filter by platform (e.g. instagram, twitter, reddit)
1476
+ */
1477
+ platform?: string;
1478
+ /**
1479
+ * Filter mentions on or after this date (ISO 8601)
1480
+ */
1481
+ start_date?: string;
1482
+ /**
1483
+ * Filter mentions on or before this date (ISO 8601)
1484
+ */
1485
+ end_date?: string;
1486
+ /**
1487
+ * Filter by region
1488
+ */
1489
+ region?: string;
1490
+ /**
1491
+ * Maximum number of results to return (1–100)
1492
+ */
1493
+ limit?: number;
1494
+ /**
1495
+ * Cursor for pagination — pass meta.next_cursor from the previous response
1496
+ */
1497
+ cursor?: string;
1498
+ };
1499
+ url: "/v1/brands/{brand_id}/mentions";
1500
+ };
1501
+ export type BrandMentionsListErrors = {
1502
+ /**
1503
+ * Brand not found
1504
+ */
1505
+ 404: Error;
1506
+ };
1507
+ export type BrandMentionsListError = BrandMentionsListErrors[keyof BrandMentionsListErrors];
1508
+ export type BrandMentionsListResponses = {
1509
+ /**
1510
+ * Paginated list of mentions
1511
+ */
1512
+ 200: {
1513
+ data: Array<Mention>;
1514
+ meta: Meta;
1515
+ };
1516
+ };
1517
+ export type BrandMentionsListResponse = BrandMentionsListResponses[keyof BrandMentionsListResponses];
1518
+ export type BrandMentionsSummaryData = {
1519
+ body?: never;
1520
+ path: {
1521
+ /**
1522
+ * Brand ID (UUID)
1523
+ */
1524
+ brand_id: string;
1525
+ };
1526
+ query?: {
1527
+ /**
1528
+ * Start of date range (ISO 8601). Defaults to 30 days ago.
1529
+ */
1530
+ start_date?: string;
1531
+ /**
1532
+ * End of date range (ISO 8601). Defaults to now.
1533
+ */
1534
+ end_date?: string;
1535
+ };
1536
+ url: "/v1/brands/{brand_id}/mentions/summary";
1537
+ };
1538
+ export type BrandMentionsSummaryErrors = {
1539
+ /**
1540
+ * Brand not found
1541
+ */
1542
+ 404: Error;
1543
+ };
1544
+ export type BrandMentionsSummaryError = BrandMentionsSummaryErrors[keyof BrandMentionsSummaryErrors];
1545
+ export type BrandMentionsSummaryResponses = {
1546
+ /**
1547
+ * Mentions summary
1548
+ */
1549
+ 200: {
1550
+ data: MentionsSummary;
1551
+ meta: Meta;
1552
+ };
1553
+ };
1554
+ export type BrandMentionsSummaryResponse = BrandMentionsSummaryResponses[keyof BrandMentionsSummaryResponses];
1555
+ export type BrandMentionsGetData = {
1556
+ body?: never;
1557
+ path: {
1558
+ /**
1559
+ * Brand ID (UUID)
1560
+ */
1561
+ brand_id: string;
1562
+ /**
1563
+ * Mention ID (UUID — corresponds to the underlying post_id)
1564
+ */
1565
+ mention_id: string;
1566
+ };
1567
+ query?: never;
1568
+ url: "/v1/brands/{brand_id}/mentions/{mention_id}";
1569
+ };
1570
+ export type BrandMentionsGetErrors = {
1571
+ /**
1572
+ * Brand or mention not found
1573
+ */
1574
+ 404: Error;
1575
+ };
1576
+ export type BrandMentionsGetError = BrandMentionsGetErrors[keyof BrandMentionsGetErrors];
1577
+ export type BrandMentionsGetResponses = {
1578
+ /**
1579
+ * Mention details
1580
+ */
1581
+ 200: {
1582
+ data: Mention;
1583
+ meta: Meta;
1584
+ };
1585
+ };
1586
+ export type BrandMentionsGetResponse = BrandMentionsGetResponses[keyof BrandMentionsGetResponses];
1587
+ export type DiscoverPostsData = {
1588
+ body?: never;
1589
+ path?: never;
1590
+ query: {
1591
+ /**
1592
+ * Social platform to search
1593
+ */
1594
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
1595
+ /**
1596
+ * Search query
1597
+ */
1598
+ q: string;
1599
+ /**
1600
+ * Pagination cursor for next page
1601
+ */
1602
+ cursor?: string;
1603
+ };
1604
+ url: "/v1/discover/posts";
1605
+ };
1606
+ export type DiscoverPostsResponses = {
1607
+ /**
1608
+ * Search results
1609
+ */
1610
+ 200: {
1611
+ data?: unknown;
1612
+ meta: Meta;
1613
+ };
1614
+ };
1615
+ export type DiscoverPostsResponse = DiscoverPostsResponses[keyof DiscoverPostsResponses];
1616
+ export type DiscoverPosts2Data = {
1617
+ body?: never;
1618
+ path?: never;
1619
+ query: {
1620
+ /**
1621
+ * Search query
1622
+ */
1623
+ q: string;
1624
+ /**
1625
+ * Pagination cursor for next page
1626
+ */
1627
+ cursor?: string;
1628
+ /**
1629
+ * Sort order: `top` (most relevant) or `latest` (most recent).
1630
+ */
1631
+ sort?: "top" | "latest";
1632
+ };
1633
+ url: "/v1/discover/x/posts";
1634
+ };
1635
+ export type DiscoverPosts2Responses = {
1636
+ /**
1637
+ * Search results
1638
+ */
1639
+ 200: {
1640
+ data?: unknown;
1641
+ meta: Meta;
1642
+ };
1643
+ };
1644
+ export type DiscoverPosts2Response = DiscoverPosts2Responses[keyof DiscoverPosts2Responses];
1645
+ export type DiscoverPosts3Data = {
1646
+ body?: never;
1647
+ path?: never;
1648
+ query: {
1649
+ /**
1650
+ * Search query
1651
+ */
1652
+ q: string;
1653
+ /**
1654
+ * Pagination cursor for next page
1655
+ */
1656
+ cursor?: string;
1657
+ /**
1658
+ * Sort order: `relevance`, `likes` (most liked), or `date` (most recent).
1659
+ */
1660
+ sort?: "relevance" | "likes" | "date";
1661
+ /**
1662
+ * Time window — posts from the last day, week, month, or year.
1663
+ */
1664
+ since?: "day" | "week" | "month" | "year";
1665
+ /**
1666
+ * ISO-2 country code to adjust results by region (e.g. `US`).
1667
+ */
1668
+ country?: string;
1669
+ };
1670
+ url: "/v1/discover/tiktok/posts";
1671
+ };
1672
+ export type DiscoverPosts3Responses = {
1673
+ /**
1674
+ * Search results
1675
+ */
1676
+ 200: {
1677
+ data?: unknown;
1678
+ meta: Meta;
1679
+ };
1680
+ };
1681
+ export type DiscoverPosts3Response = DiscoverPosts3Responses[keyof DiscoverPosts3Responses];
1682
+ export type DiscoverPosts4Data = {
1683
+ body?: never;
1684
+ path?: never;
1685
+ query: {
1686
+ /**
1687
+ * Search query
1688
+ */
1689
+ q: string;
1690
+ /**
1691
+ * Pagination cursor for next page
1692
+ */
1693
+ cursor?: string;
1694
+ /**
1695
+ * Sort order: relevance, hot, top, new, or comments.
1696
+ */
1697
+ sort?: "relevance" | "hot" | "top" | "new" | "comments";
1698
+ /**
1699
+ * Time window: hour, today, week, month, year, or all. Reddit requires it when `sort` is top, comments, or relevance.
1700
+ */
1701
+ since?: "hour" | "today" | "week" | "month" | "year" | "all";
1702
+ };
1703
+ url: "/v1/discover/reddit/posts";
1704
+ };
1705
+ export type DiscoverPosts4Responses = {
1706
+ /**
1707
+ * Search results
1708
+ */
1709
+ 200: {
1710
+ data?: unknown;
1711
+ meta: Meta;
1712
+ };
1713
+ };
1714
+ export type DiscoverPosts4Response = DiscoverPosts4Responses[keyof DiscoverPosts4Responses];
1715
+ export type DiscoverPosts5Data = {
1716
+ body?: never;
1717
+ path?: never;
1718
+ query: {
1719
+ /**
1720
+ * Search query
1721
+ */
1722
+ q: string;
1723
+ /**
1724
+ * Pagination cursor for next page
1725
+ */
1726
+ cursor?: string;
1727
+ /**
1728
+ * Sort order: `top` (most relevant, default) or `latest` (most recent).
1729
+ */
1730
+ sort?: "top" | "latest";
1731
+ /**
1732
+ * Time window: day, week, or month.
1733
+ */
1734
+ since?: "day" | "week" | "month";
1735
+ };
1736
+ url: "/v1/discover/linkedin/posts";
1737
+ };
1738
+ export type DiscoverPosts5Responses = {
1739
+ /**
1740
+ * Search results
1741
+ */
1742
+ 200: {
1743
+ data?: unknown;
1744
+ meta: Meta;
1745
+ };
1746
+ };
1747
+ export type DiscoverPosts5Response = DiscoverPosts5Responses[keyof DiscoverPosts5Responses];
1748
+ export type DiscoverPosts6Data = {
1749
+ body?: never;
1750
+ path?: never;
1751
+ query: {
1752
+ /**
1753
+ * Search query
1754
+ */
1755
+ q: string;
1756
+ /**
1757
+ * Pagination cursor for next page
1758
+ */
1759
+ cursor?: string;
1760
+ /**
1761
+ * Sort order: `relevance` or `popularity` (by view count).
1762
+ */
1763
+ sort?: "relevance" | "popularity";
1764
+ /**
1765
+ * Time window — videos from the last day, week, month, or year. Omit for all-time.
1766
+ */
1767
+ since?: "day" | "week" | "month" | "year";
1768
+ };
1769
+ url: "/v1/discover/youtube/posts";
1770
+ };
1771
+ export type DiscoverPosts6Responses = {
1772
+ /**
1773
+ * Search results
1774
+ */
1775
+ 200: {
1776
+ data?: unknown;
1777
+ meta: Meta;
1778
+ };
1779
+ };
1780
+ export type DiscoverPosts6Response = DiscoverPosts6Responses[keyof DiscoverPosts6Responses];
1781
+ export type DiscoverPosts7Data = {
1782
+ body?: never;
1783
+ path?: never;
1784
+ query: {
1785
+ /**
1786
+ * Search query
1787
+ */
1788
+ q: string;
1789
+ /**
1790
+ * Pagination cursor for next page
1791
+ */
1792
+ cursor?: string;
1793
+ };
1794
+ url: "/v1/discover/instagram/posts";
1795
+ };
1796
+ export type DiscoverPosts7Responses = {
1797
+ /**
1798
+ * Search results
1799
+ */
1800
+ 200: {
1801
+ data?: unknown;
1802
+ meta: Meta;
1803
+ };
1804
+ };
1805
+ export type DiscoverPosts7Response = DiscoverPosts7Responses[keyof DiscoverPosts7Responses];
1806
+ export type DiscoverPosts8Data = {
1807
+ body?: never;
1808
+ path?: never;
1809
+ query: {
1810
+ /**
1811
+ * Search query
1812
+ */
1813
+ q: string;
1814
+ /**
1815
+ * Pagination cursor for next page
1816
+ */
1817
+ cursor?: string;
1818
+ };
1819
+ url: "/v1/discover/facebook/posts";
1820
+ };
1821
+ export type DiscoverPosts8Responses = {
1822
+ /**
1823
+ * Search results
1824
+ */
1825
+ 200: {
1826
+ data?: unknown;
1827
+ meta: Meta;
1828
+ };
1829
+ };
1830
+ export type DiscoverPosts8Response = DiscoverPosts8Responses[keyof DiscoverPosts8Responses];
1831
+ export type DiscoverAdsData = {
1832
+ body?: never;
1833
+ path?: never;
1834
+ query: {
1835
+ /**
1836
+ * Ad platform to search (meta, google, or linkedin)
1837
+ */
1838
+ platform: "meta" | "google" | "linkedin";
1839
+ /**
1840
+ * Search query or advertiser name. For platform=google this is an advertiser domain (e.g. 'shopify.com') — the Google Ads Transparency Center has no free-text search.
1841
+ */
1842
+ q: string;
1843
+ /**
1844
+ * Pagination cursor for next page
1845
+ */
1846
+ cursor?: string;
1847
+ };
1848
+ url: "/v1/discover/ads";
1849
+ };
1850
+ export type DiscoverAdsResponses = {
1851
+ /**
1852
+ * Ad search results
1853
+ */
1854
+ 200: {
1855
+ data?: unknown;
1856
+ meta: Meta;
1857
+ };
1858
+ };
1859
+ export type DiscoverAdsResponse = DiscoverAdsResponses[keyof DiscoverAdsResponses];
1860
+ export type DiscoverTrendsData = {
1861
+ body?: never;
1862
+ path?: never;
1863
+ query: {
1864
+ /**
1865
+ * Trends platform (x or google_trends)
1866
+ */
1867
+ platform: "x" | "google_trends" | "tiktok";
1868
+ /**
1869
+ * Search query (required for google_trends; ignored for x, which lists trends rather than searches them)
1870
+ */
1871
+ q?: string;
1872
+ /**
1873
+ * Country filter (ISO 2-letter code)
1874
+ */
1875
+ country?: string;
1876
+ };
1877
+ url: "/v1/discover/trends";
1878
+ };
1879
+ export type DiscoverTrendsResponses = {
1880
+ /**
1881
+ * Trending topics
1882
+ */
1883
+ 200: {
1884
+ data?: unknown;
1885
+ meta: Meta;
1886
+ };
1887
+ };
1888
+ export type DiscoverTrendsResponse = DiscoverTrendsResponses[keyof DiscoverTrendsResponses];
1889
+ export type DiscoverUsersData = {
1890
+ body?: never;
1891
+ path?: never;
1892
+ query: {
1893
+ /**
1894
+ * Social platform to search
1895
+ */
1896
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube";
1897
+ /**
1898
+ * Search query
1899
+ */
1900
+ q: string;
1901
+ /**
1902
+ * Pagination cursor for next page
1903
+ */
1904
+ cursor?: string;
1905
+ };
1906
+ url: "/v1/discover/users";
1907
+ };
1908
+ export type DiscoverUsersResponses = {
1909
+ /**
1910
+ * Creator search results
1911
+ */
1912
+ 200: {
1913
+ data?: unknown;
1914
+ meta: Meta;
1915
+ };
1916
+ };
1917
+ export type DiscoverUsersResponse = DiscoverUsersResponses[keyof DiscoverUsersResponses];
1918
+ export type DiscoverCompaniesData = {
1919
+ body?: never;
1920
+ path?: never;
1921
+ query: {
1922
+ /**
1923
+ * Company name or keyword
1924
+ */
1925
+ q: string;
1926
+ /**
1927
+ * Pagination cursor for next page
1928
+ */
1929
+ cursor?: string;
1930
+ };
1931
+ url: "/v1/discover/companies";
1932
+ };
1933
+ export type DiscoverCompaniesResponses = {
1934
+ /**
1935
+ * Company search results
1936
+ */
1937
+ 200: {
1938
+ data?: unknown;
1939
+ meta: Meta;
1940
+ };
1941
+ };
1942
+ export type DiscoverCompaniesResponse = DiscoverCompaniesResponses[keyof DiscoverCompaniesResponses];
1943
+ export type DiscoverJobsData = {
1944
+ body?: never;
1945
+ path?: never;
1946
+ query: {
1947
+ /**
1948
+ * Job title or keyword
1949
+ */
1950
+ q: string;
1951
+ /**
1952
+ * Pagination cursor for next page
1953
+ */
1954
+ cursor?: string;
1955
+ };
1956
+ url: "/v1/discover/jobs";
1957
+ };
1958
+ export type DiscoverJobsResponses = {
1959
+ /**
1960
+ * Job search results
1961
+ */
1962
+ 200: {
1963
+ data?: unknown;
1964
+ meta: Meta;
1965
+ };
1966
+ };
1967
+ export type DiscoverJobsResponse = DiscoverJobsResponses[keyof DiscoverJobsResponses];
1968
+ export type DiscoverCommunitiesData = {
1969
+ body?: never;
1970
+ path?: never;
1971
+ query: {
1972
+ /**
1973
+ * Community name or topic
1974
+ */
1975
+ q: string;
1976
+ };
1977
+ url: "/v1/discover/communities";
1978
+ };
1979
+ export type DiscoverCommunitiesResponses = {
1980
+ /**
1981
+ * Community search results
1982
+ */
1983
+ 200: {
1984
+ data?: unknown;
1985
+ meta: Meta;
1986
+ };
1987
+ };
1988
+ export type DiscoverCommunitiesResponse = DiscoverCommunitiesResponses[keyof DiscoverCommunitiesResponses];
1989
+ export type EnrichmentPostLookupData = {
1990
+ body?: never;
1991
+ path?: never;
1992
+ query: {
1993
+ /**
1994
+ * Full post URL (LinkedIn, Twitter/X, Instagram, TikTok, Facebook, YouTube, Reddit)
1995
+ */
1996
+ url: string;
1997
+ /**
1998
+ * Optional override when the URL host doesn't disambiguate the platform.
1999
+ */
2000
+ platform?: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2001
+ };
2002
+ url: "/v1/posts/lookup";
2003
+ };
2004
+ export type EnrichmentPostLookupResponses = {
2005
+ /**
2006
+ * Enriched post data with minted post_id
2007
+ */
2008
+ 200: {
2009
+ data?: unknown;
2010
+ meta: Meta;
2011
+ };
2012
+ };
2013
+ export type EnrichmentPostLookupResponse = EnrichmentPostLookupResponses[keyof EnrichmentPostLookupResponses];
2014
+ export type EnrichmentPostGetData = {
2015
+ body?: never;
2016
+ path: {
2017
+ /**
2018
+ * Opaque pid_… token (returned in discover/search/profile-posts items and /v1/posts/lookup responses) OR a bare platform ID paired with the `platform` query — both forms are first-class. Do NOT pass a raw post URL: encoded slashes die at the API gateway and return a bare 404 before the handler runs. Use /v1/posts/lookup?url=… when you only have a URL.
2019
+ */
2020
+ post_id: string;
2021
+ };
2022
+ query?: {
2023
+ /**
2024
+ * Required only when `post_id` is a bare platform ID; ignored when a synthetic pid_ token is supplied.
2025
+ */
2026
+ platform?: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2027
+ };
2028
+ url: "/v1/posts/{post_id}";
2029
+ };
2030
+ export type EnrichmentPostGetResponses = {
2031
+ /**
2032
+ * Enriched post data
2033
+ */
2034
+ 200: {
2035
+ data?: unknown;
2036
+ meta: Meta;
2037
+ };
2038
+ };
2039
+ export type EnrichmentPostGetResponse = EnrichmentPostGetResponses[keyof EnrichmentPostGetResponses];
2040
+ export type EnrichmentPostCommentsData = {
2041
+ body?: never;
2042
+ path: {
2043
+ /**
2044
+ * Opaque pid_… token (returned in discover/search/profile-posts items and /v1/posts/lookup responses) OR a bare platform ID paired with the `platform` query — both forms are first-class. Do NOT pass a raw post URL: encoded slashes die at the API gateway and return a bare 404 before the handler runs. Use /v1/posts/lookup?url=… when you only have a URL.
2045
+ */
2046
+ post_id: string;
2047
+ };
2048
+ query?: {
2049
+ /**
2050
+ * Required only when `post_id` is a bare platform ID; ignored when a synthetic pid_ token is supplied.
2051
+ */
2052
+ platform?: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2053
+ /**
2054
+ * Pagination cursor for next page
2055
+ */
2056
+ cursor?: string;
2057
+ };
2058
+ url: "/v1/posts/{post_id}/comments";
2059
+ };
2060
+ export type EnrichmentPostCommentsResponses = {
2061
+ /**
2062
+ * Post comments
2063
+ */
2064
+ 200: {
2065
+ data?: unknown;
2066
+ meta: Meta;
2067
+ };
2068
+ };
2069
+ export type EnrichmentPostCommentsResponse = EnrichmentPostCommentsResponses[keyof EnrichmentPostCommentsResponses];
2070
+ export type EnrichmentProfileGetData = {
2071
+ body?: never;
2072
+ path: {
2073
+ /**
2074
+ * Social platform
2075
+ */
2076
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2077
+ /**
2078
+ * Username or handle (without @)
2079
+ */
2080
+ username: string;
2081
+ };
2082
+ query?: never;
2083
+ url: "/v1/profiles/{platform}/{username}";
2084
+ };
2085
+ export type EnrichmentProfileGetResponses = {
2086
+ /**
2087
+ * Profile data
2088
+ */
2089
+ 200: {
2090
+ data?: unknown;
2091
+ meta: Meta;
2092
+ };
2093
+ };
2094
+ export type EnrichmentProfileGetResponse = EnrichmentProfileGetResponses[keyof EnrichmentProfileGetResponses];
2095
+ export type EnrichmentProfilePostsData = {
2096
+ body?: never;
2097
+ path: {
2098
+ /**
2099
+ * Social platform
2100
+ */
2101
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2102
+ /**
2103
+ * Username or handle (without @)
2104
+ */
2105
+ username: string;
2106
+ };
2107
+ query?: {
2108
+ /**
2109
+ * YouTube only — selects which upload stream to fetch. Required when `platform=youtube`.
2110
+ */
2111
+ type?: "videos" | "shorts";
2112
+ /**
2113
+ * Pagination cursor for next page. One request returns one page; follow `meta.next_cursor` for deeper history.
2114
+ */
2115
+ cursor?: string;
2116
+ };
2117
+ url: "/v1/profiles/{platform}/{username}/posts";
2118
+ };
2119
+ export type EnrichmentProfilePostsResponses = {
2120
+ /**
2121
+ * User's posts (single page)
2122
+ */
2123
+ 200: {
2124
+ data?: unknown;
2125
+ meta: Meta;
2126
+ };
2127
+ };
2128
+ export type EnrichmentProfilePostsResponse = EnrichmentProfilePostsResponses[keyof EnrichmentProfilePostsResponses];
2129
+ export type EnrichmentProfileFollowingData = {
2130
+ body?: never;
2131
+ path: {
2132
+ /**
2133
+ * Social platform (x, instagram, tiktok, facebook)
2134
+ */
2135
+ platform: "x" | "instagram" | "tiktok" | "facebook";
2136
+ /**
2137
+ * Username or handle (without @)
2138
+ */
2139
+ username: string;
2140
+ };
2141
+ query?: {
2142
+ /**
2143
+ * Pagination cursor for the next page. One request returns one page; pass back the `meta.next_cursor` returned in the response for more.
2144
+ */
2145
+ cursor?: string;
2146
+ };
2147
+ url: "/v1/profiles/{platform}/{username}/following";
2148
+ };
2149
+ export type EnrichmentProfileFollowingResponses = {
2150
+ /**
2151
+ * Accounts the user follows (single page)
2152
+ */
2153
+ 200: {
2154
+ data?: unknown;
2155
+ meta: Meta;
2156
+ };
2157
+ };
2158
+ export type EnrichmentProfileFollowingResponse = EnrichmentProfileFollowingResponses[keyof EnrichmentProfileFollowingResponses];
2159
+ export type EnrichmentVideoTranscriptData = {
2160
+ body?: never;
2161
+ path: {
2162
+ /**
2163
+ * YouTube video ID
2164
+ */
2165
+ video_id: string;
2166
+ };
2167
+ query?: never;
2168
+ url: "/v1/videos/{video_id}/transcript";
2169
+ };
2170
+ export type EnrichmentVideoTranscriptResponses = {
2171
+ /**
2172
+ * Video transcript
2173
+ */
2174
+ 200: {
2175
+ data?: unknown;
2176
+ meta: Meta;
2177
+ };
2178
+ };
2179
+ export type EnrichmentVideoTranscriptResponse = EnrichmentVideoTranscriptResponses[keyof EnrichmentVideoTranscriptResponses];
2180
+ export type EnrichmentCompanySearchData = {
2181
+ body?: never;
2182
+ path: {
2183
+ /**
2184
+ * Platform (linkedin and facebook supported today)
2185
+ */
2186
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2187
+ };
2188
+ query: {
2189
+ /**
2190
+ * Search query (typically a brand name)
2191
+ */
2192
+ q: string;
2193
+ /**
2194
+ * Pagination cursor for next page. One request returns one page; follow `meta.next_cursor` for more.
2195
+ */
2196
+ cursor?: string;
2197
+ /**
2198
+ * ISO 2-letter country code (Facebook / Meta Ad Library only)
2199
+ */
2200
+ country?: string;
2201
+ };
2202
+ url: "/v1/companies/{platform}/search";
2203
+ };
2204
+ export type EnrichmentCompanySearchResponses = {
2205
+ /**
2206
+ * Company search results (single page)
2207
+ */
2208
+ 200: {
2209
+ data?: unknown;
2210
+ meta: Meta;
2211
+ };
2212
+ };
2213
+ export type EnrichmentCompanySearchResponse = EnrichmentCompanySearchResponses[keyof EnrichmentCompanySearchResponses];
2214
+ export type EnrichmentCompanyGetData = {
2215
+ body?: never;
2216
+ path: {
2217
+ /**
2218
+ * Platform (linkedin supported today)
2219
+ */
2220
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2221
+ /**
2222
+ * Company URL, slug, or numeric identifier
2223
+ */
2224
+ identifier: string;
2225
+ };
2226
+ query?: never;
2227
+ url: "/v1/companies/{platform}/{identifier}";
2228
+ };
2229
+ export type EnrichmentCompanyGetResponses = {
2230
+ /**
2231
+ * Company profile
2232
+ */
2233
+ 200: {
2234
+ data?: unknown;
2235
+ meta: Meta;
2236
+ };
2237
+ };
2238
+ export type EnrichmentCompanyGetResponse = EnrichmentCompanyGetResponses[keyof EnrichmentCompanyGetResponses];
2239
+ export type EnrichmentCompanyJobsData = {
2240
+ body?: never;
2241
+ path: {
2242
+ /**
2243
+ * Platform (linkedin supported today)
2244
+ */
2245
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2246
+ /**
2247
+ * Company URL, slug, or numeric identifier
2248
+ */
2249
+ identifier: string;
2250
+ };
2251
+ query?: {
2252
+ /**
2253
+ * Pagination cursor for the next page. One request returns one page; pass back the `meta.next_cursor` returned in the response for more.
2254
+ */
2255
+ cursor?: string;
2256
+ };
2257
+ url: "/v1/companies/{platform}/{identifier}/jobs";
2258
+ };
2259
+ export type EnrichmentCompanyJobsResponses = {
2260
+ /**
2261
+ * Company job listings
2262
+ */
2263
+ 200: {
2264
+ data?: unknown;
2265
+ meta: Meta;
2266
+ };
2267
+ };
2268
+ export type EnrichmentCompanyJobsResponse = EnrichmentCompanyJobsResponses[keyof EnrichmentCompanyJobsResponses];
2269
+ export type EnrichmentCompanyPeopleData = {
2270
+ body?: never;
2271
+ path: {
2272
+ /**
2273
+ * Platform (linkedin supported today)
2274
+ */
2275
+ platform: "x" | "instagram" | "tiktok" | "linkedin" | "facebook" | "youtube" | "reddit";
2276
+ /**
2277
+ * Company URL, slug, or numeric identifier
2278
+ */
2279
+ identifier: string;
2280
+ };
2281
+ query?: {
2282
+ /**
2283
+ * Pagination cursor for the next page. One request returns one page; pass back the `meta.next_cursor` returned in the response for more.
2284
+ */
2285
+ cursor?: string;
2286
+ };
2287
+ url: "/v1/companies/{platform}/{identifier}/people";
2288
+ };
2289
+ export type EnrichmentCompanyPeopleResponses = {
2290
+ /**
2291
+ * Company people
2292
+ */
2293
+ 200: {
2294
+ data?: unknown;
2295
+ meta: Meta;
2296
+ };
2297
+ };
2298
+ export type EnrichmentCompanyPeopleResponse = EnrichmentCompanyPeopleResponses[keyof EnrichmentCompanyPeopleResponses];
2299
+ export type CommunityUserPostsData = {
2300
+ body?: never;
2301
+ path: {
2302
+ /**
2303
+ * Reddit username, without the u/ prefix
2304
+ */
2305
+ name: string;
2306
+ };
2307
+ query?: {
2308
+ /**
2309
+ * Sort order. `range` is required when sort is TOP or CONTROVERSIAL.
2310
+ */
2311
+ sort?: "CONTROVERSIAL" | "HOT" | "TOP" | "NEW";
2312
+ /**
2313
+ * Time window. Required when sort is TOP or CONTROVERSIAL.
2314
+ */
2315
+ range?: "PAST_HOUR" | "TODAY" | "PAST_WEEK" | "PAST_MONTH" | "PAST_YEAR" | "ALL_TIME";
2316
+ /**
2317
+ * Pagination cursor. One request returns one page; follow `meta.next_cursor` for more.
2318
+ */
2319
+ cursor?: string;
2320
+ };
2321
+ url: "/v1/communities/reddit/users/{name}/posts";
2322
+ };
2323
+ export type CommunityUserPostsResponses = {
2324
+ /**
2325
+ * A page of the user's posts
2326
+ */
2327
+ 200: {
2328
+ data: {
2329
+ items: Array<NormalizedPost>;
2330
+ };
2331
+ meta: Meta;
2332
+ };
2333
+ };
2334
+ export type CommunityUserPostsResponse = CommunityUserPostsResponses[keyof CommunityUserPostsResponses];
2335
+ export type CommunityUserCommentsData = {
2336
+ body?: never;
2337
+ path: {
2338
+ /**
2339
+ * Reddit username, without the u/ prefix
2340
+ */
2341
+ name: string;
2342
+ };
2343
+ query?: {
2344
+ /**
2345
+ * Pagination cursor. One request returns one page; follow `meta.next_cursor` for more.
2346
+ */
2347
+ cursor?: string;
2348
+ };
2349
+ url: "/v1/communities/reddit/users/{name}/comments";
2350
+ };
2351
+ export type CommunityUserCommentsResponses = {
2352
+ /**
2353
+ * A page of the user's comments
2354
+ */
2355
+ 200: {
2356
+ data: {
2357
+ items: Array<RedditComment>;
2358
+ };
2359
+ meta: Meta;
2360
+ };
2361
+ };
2362
+ export type CommunityUserCommentsResponse = CommunityUserCommentsResponses[keyof CommunityUserCommentsResponses];
2363
+ export type CommunityPostsData = {
2364
+ body?: never;
2365
+ path: {
2366
+ /**
2367
+ * Subreddit name, without the r/ prefix
2368
+ */
2369
+ name: string;
2370
+ };
2371
+ query?: {
2372
+ /**
2373
+ * Feed sort order. `range` is required when sort is TOP or CONTROVERSIAL.
2374
+ */
2375
+ sort?: "BEST" | "HOT" | "NEW" | "TOP" | "CONTROVERSIAL" | "RISING";
2376
+ /**
2377
+ * Time window. Required when sort is TOP or CONTROVERSIAL.
2378
+ */
2379
+ range?: "PAST_HOUR" | "TODAY" | "PAST_WEEK" | "PAST_MONTH" | "PAST_YEAR" | "ALL_TIME";
2380
+ /**
2381
+ * Pagination cursor. One request returns one page; follow `meta.next_cursor` for more.
2382
+ */
2383
+ cursor?: string;
2384
+ };
2385
+ url: "/v1/communities/reddit/{name}/posts";
2386
+ };
2387
+ export type CommunityPostsResponses = {
2388
+ /**
2389
+ * A page of subreddit posts
2390
+ */
2391
+ 200: {
2392
+ data: {
2393
+ items: Array<NormalizedPost>;
2394
+ };
2395
+ meta: Meta;
2396
+ };
2397
+ };
2398
+ export type CommunityPostsResponse = CommunityPostsResponses[keyof CommunityPostsResponses];
2399
+ export type CommunityGetData = {
2400
+ body?: never;
2401
+ path: {
2402
+ /**
2403
+ * Subreddit name, without the r/ prefix
2404
+ */
2405
+ name: string;
2406
+ };
2407
+ query?: never;
2408
+ url: "/v1/communities/reddit/{name}";
2409
+ };
2410
+ export type CommunityGetResponses = {
2411
+ /**
2412
+ * Subreddit metadata
2413
+ */
2414
+ 200: {
2415
+ data: RedditSubredditDetails;
2416
+ meta: Meta;
2417
+ };
2418
+ };
2419
+ export type CommunityGetResponse = CommunityGetResponses[keyof CommunityGetResponses];
2420
+ export type GetV1BrandSearchData = {
2421
+ body?: never;
2422
+ path?: never;
2423
+ query: {
2424
+ /**
2425
+ * Search query (required)
2426
+ */
2427
+ q: string;
2428
+ /**
2429
+ * Filter to a specific brand
2430
+ */
2431
+ brand_id?: string;
2432
+ /**
2433
+ * Filter to brands in a category
2434
+ */
2435
+ category_id?: string;
2436
+ /**
2437
+ * Filter by platform (e.g. instagram, tiktok, twitter)
2438
+ */
2439
+ platform?: string;
2440
+ /**
2441
+ * Filter by dataset: owned_media (brand-published) or mentions (earned/mention)
2442
+ */
2443
+ dataset?: "owned_media" | "mentions";
2444
+ /**
2445
+ * Filter posts on or after this date (ISO 8601)
2446
+ */
2447
+ start_date?: string;
2448
+ /**
2449
+ * Filter posts on or before this date (ISO 8601)
2450
+ */
2451
+ end_date?: string;
2452
+ /**
2453
+ * Maximum number of results to return (1–100)
2454
+ */
2455
+ limit?: number;
2456
+ /**
2457
+ * Cursor for pagination — pass meta.next_cursor from the previous response
2458
+ */
2459
+ cursor?: string;
2460
+ };
2461
+ url: "/v1/brand-search";
2462
+ };
2463
+ export type GetV1BrandSearchErrors = {
2464
+ /**
2465
+ * Invalid search query
2466
+ */
2467
+ 400: Error;
2468
+ };
2469
+ export type GetV1BrandSearchError = GetV1BrandSearchErrors[keyof GetV1BrandSearchErrors];
2470
+ export type GetV1BrandSearchResponses = {
2471
+ /**
2472
+ * Search results ranked by relevance
2473
+ */
2474
+ 200: {
2475
+ data: Array<SearchResult>;
2476
+ meta: Meta;
2477
+ };
2478
+ };
2479
+ export type GetV1BrandSearchResponse = GetV1BrandSearchResponses[keyof GetV1BrandSearchResponses];
2480
+ export type GetV1AccountData = {
2481
+ body?: never;
2482
+ path?: never;
2483
+ query?: never;
2484
+ url: "/v1/account";
2485
+ };
2486
+ export type GetV1AccountResponses = {
2487
+ /**
2488
+ * Account profile
2489
+ */
2490
+ 200: {
2491
+ data: AccountProfile;
2492
+ meta: Meta;
2493
+ };
2494
+ };
2495
+ export type GetV1AccountResponse = GetV1AccountResponses[keyof GetV1AccountResponses];
2496
+ export type GetV1AccountBalanceData = {
2497
+ body?: never;
2498
+ path?: never;
2499
+ query?: never;
2500
+ url: "/v1/account/balance";
2501
+ };
2502
+ export type GetV1AccountBalanceResponses = {
2503
+ /**
2504
+ * Credit balance
2505
+ */
2506
+ 200: {
2507
+ data: AccountBalance;
2508
+ meta: Meta;
2509
+ };
2510
+ };
2511
+ export type GetV1AccountBalanceResponse = GetV1AccountBalanceResponses[keyof GetV1AccountBalanceResponses];
2512
+ export type GetV1AccountUsageData = {
2513
+ body?: never;
2514
+ path?: never;
2515
+ query?: never;
2516
+ url: "/v1/account/usage";
2517
+ };
2518
+ export type GetV1AccountUsageResponses = {
2519
+ /**
2520
+ * Usage breakdown
2521
+ */
2522
+ 200: {
2523
+ data: AccountUsage;
2524
+ meta: Meta;
2525
+ };
2526
+ };
2527
+ export type GetV1AccountUsageResponse = GetV1AccountUsageResponses[keyof GetV1AccountUsageResponses];
2528
+ export type TeamListData = {
2529
+ body?: never;
2530
+ path?: never;
2531
+ query?: {
2532
+ /**
2533
+ * Substring match on name or team_id
2534
+ */
2535
+ query?: string;
2536
+ creditFilter?: "ALL" | "UNLIMITED";
2537
+ limit?: number;
2538
+ offset?: number | null;
2539
+ };
2540
+ url: "/v1/teams";
2541
+ };
2542
+ export type TeamListErrors = {
2543
+ /**
2544
+ * Admin required
2545
+ */
2546
+ 403: Error;
2547
+ };
2548
+ export type TeamListError = TeamListErrors[keyof TeamListErrors];
2549
+ export type TeamListResponses = {
2550
+ /**
2551
+ * Teams listed
2552
+ */
2553
+ 200: {
2554
+ data: Array<AdminTeamRow>;
2555
+ /**
2556
+ * True when more rows exist past the returned page. Increment offset by limit to fetch the next page.
2557
+ */
2558
+ hasMore: boolean;
2559
+ };
2560
+ };
2561
+ export type TeamListResponse = TeamListResponses[keyof TeamListResponses];
2562
+ export type TeamCreateData = {
2563
+ body?: {
2564
+ name: string;
2565
+ slug: string;
2566
+ autoInviteDomain?: string;
2567
+ /**
2568
+ * Override default billable=true. Pass false for an unlimited-credits team.
2569
+ */
2570
+ billable?: boolean;
2571
+ };
2572
+ path?: never;
2573
+ query?: never;
2574
+ url: "/v1/teams";
2575
+ };
2576
+ export type TeamCreateErrors = {
2577
+ /**
2578
+ * Admin required
2579
+ */
2580
+ 403: Error;
2581
+ };
2582
+ export type TeamCreateError = TeamCreateErrors[keyof TeamCreateErrors];
2583
+ export type TeamCreateResponses = {
2584
+ /**
2585
+ * Team created
2586
+ */
2587
+ 201: {
2588
+ data: AdminTeamRow;
2589
+ };
2590
+ };
2591
+ export type TeamCreateResponse = TeamCreateResponses[keyof TeamCreateResponses];
2592
+ export type TeamGetData = {
2593
+ body?: never;
2594
+ path: {
2595
+ team_id: number;
2596
+ };
2597
+ query?: never;
2598
+ url: "/v1/teams/{team_id}";
2599
+ };
2600
+ export type TeamGetErrors = {
2601
+ /**
2602
+ * Admin required
2603
+ */
2604
+ 403: Error;
2605
+ /**
2606
+ * Team not found
2607
+ */
2608
+ 404: Error;
2609
+ };
2610
+ export type TeamGetError = TeamGetErrors[keyof TeamGetErrors];
2611
+ export type TeamGetResponses = {
2612
+ /**
2613
+ * Team
2614
+ */
2615
+ 200: {
2616
+ data: AdminTeamRow;
2617
+ };
2618
+ };
2619
+ export type TeamGetResponse = TeamGetResponses[keyof TeamGetResponses];
2620
+ export type TeamSetBillableData = {
2621
+ body?: {
2622
+ billable: boolean;
2623
+ };
2624
+ path: {
2625
+ team_id: number;
2626
+ };
2627
+ query?: never;
2628
+ url: "/v1/teams/{team_id}/billable";
2629
+ };
2630
+ export type TeamSetBillableErrors = {
2631
+ /**
2632
+ * Admin required
2633
+ */
2634
+ 403: Error;
2635
+ };
2636
+ export type TeamSetBillableError = TeamSetBillableErrors[keyof TeamSetBillableErrors];
2637
+ export type TeamSetBillableResponses = {
2638
+ /**
2639
+ * Team updated
2640
+ */
2641
+ 200: {
2642
+ data: AdminTeamRow;
2643
+ };
2644
+ };
2645
+ export type TeamSetBillableResponse = TeamSetBillableResponses[keyof TeamSetBillableResponses];
2646
+ export type TeamListFlagsData = {
2647
+ body?: never;
2648
+ path: {
2649
+ team_id: number;
2650
+ };
2651
+ query?: never;
2652
+ url: "/v1/teams/{team_id}/flags";
2653
+ };
2654
+ export type TeamListFlagsErrors = {
2655
+ /**
2656
+ * Admin required
2657
+ */
2658
+ 403: Error;
2659
+ };
2660
+ export type TeamListFlagsError = TeamListFlagsErrors[keyof TeamListFlagsErrors];
2661
+ export type TeamListFlagsResponses = {
2662
+ /**
2663
+ * Flags listed
2664
+ */
2665
+ 200: {
2666
+ data: Array<TeamFlagRow>;
2667
+ };
2668
+ };
2669
+ export type TeamListFlagsResponse = TeamListFlagsResponses[keyof TeamListFlagsResponses];
2670
+ export type TeamSetFlagData = {
2671
+ body?: {
2672
+ flag: string;
2673
+ enabled: boolean;
2674
+ };
2675
+ path: {
2676
+ team_id: number;
2677
+ };
2678
+ query?: never;
2679
+ url: "/v1/teams/{team_id}/flags";
2680
+ };
2681
+ export type TeamSetFlagErrors = {
2682
+ /**
2683
+ * Bad flag name
2684
+ */
2685
+ 400: Error;
2686
+ /**
2687
+ * Admin required
2688
+ */
2689
+ 403: Error;
2690
+ };
2691
+ export type TeamSetFlagError = TeamSetFlagErrors[keyof TeamSetFlagErrors];
2692
+ export type TeamSetFlagResponses = {
2693
+ /**
2694
+ * Flag set
2695
+ */
2696
+ 200: {
2697
+ data: TeamFlagRow;
2698
+ };
2699
+ };
2700
+ export type TeamSetFlagResponse = TeamSetFlagResponses[keyof TeamSetFlagResponses];
2701
+ //# sourceMappingURL=types.gen.d.ts.map