@productcraft/waitlist 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.
@@ -0,0 +1,1804 @@
1
+ import { makeClient, PCClientConfig } from '@productcraft/core';
2
+
3
+ /**
4
+ * This file was auto-generated by openapi-typescript.
5
+ * Do not make direct changes to the file.
6
+ */
7
+
8
+ interface paths {
9
+ "/v1/waitlists/{workspace_slug}/{waitlist_slug}": {
10
+ parameters: {
11
+ query?: never;
12
+ header?: never;
13
+ path?: never;
14
+ cookie?: never;
15
+ };
16
+ /** Public waitlist info (display name, description, custom-field schema, branding hints, active variant) */
17
+ get: operations["PublicWaitlistController_getPublic"];
18
+ put?: never;
19
+ post?: never;
20
+ delete?: never;
21
+ options?: never;
22
+ head?: never;
23
+ patch?: never;
24
+ trace?: never;
25
+ };
26
+ "/v1/waitlists/{workspace_slug}/{waitlist_slug}/entries": {
27
+ parameters: {
28
+ query?: never;
29
+ header?: never;
30
+ path?: never;
31
+ cookie?: never;
32
+ };
33
+ get?: never;
34
+ put?: never;
35
+ /** Submit a new entry to a public waitlist */
36
+ post: operations["PublicWaitlistController_submit"];
37
+ delete?: never;
38
+ options?: never;
39
+ head?: never;
40
+ patch?: never;
41
+ trace?: never;
42
+ };
43
+ "/v1/waitlists/{workspace_slug}/{waitlist_slug}/leaderboard": {
44
+ parameters: {
45
+ query?: never;
46
+ header?: never;
47
+ path?: never;
48
+ cookie?: never;
49
+ };
50
+ /** Public top-50 referral leaderboard. Emails are masked. Anonymous read; same access policy as the public waitlist info endpoint. */
51
+ get: operations["PublicWaitlistController_leaderboard"];
52
+ put?: never;
53
+ post?: never;
54
+ delete?: never;
55
+ options?: never;
56
+ head?: never;
57
+ patch?: never;
58
+ trace?: never;
59
+ };
60
+ "/v1/workspaces/{workspace_id}/waitlist/settings": {
61
+ parameters: {
62
+ query?: never;
63
+ header?: never;
64
+ path?: never;
65
+ cookie?: never;
66
+ };
67
+ /** Read workspace-level Waitlist defaults */
68
+ get: operations["SettingsController_get"];
69
+ /** Update workspace-level Waitlist defaults */
70
+ put: operations["SettingsController_update"];
71
+ post?: never;
72
+ delete?: never;
73
+ options?: never;
74
+ head?: never;
75
+ patch?: never;
76
+ trace?: never;
77
+ };
78
+ "/v1/workspaces/{workspace_id}/waitlists": {
79
+ parameters: {
80
+ query?: never;
81
+ header?: never;
82
+ path?: never;
83
+ cookie?: never;
84
+ };
85
+ /** List waitlists in this workspace */
86
+ get: operations["WaitlistController_list"];
87
+ put?: never;
88
+ /** Create a waitlist (workspace-scoped) */
89
+ post: operations["WaitlistController_create"];
90
+ delete?: never;
91
+ options?: never;
92
+ head?: never;
93
+ patch?: never;
94
+ trace?: never;
95
+ };
96
+ "/v1/workspaces/{workspace_id}/waitlists/{id}": {
97
+ parameters: {
98
+ query?: never;
99
+ header?: never;
100
+ path?: never;
101
+ cookie?: never;
102
+ };
103
+ /** Get waitlist details */
104
+ get: operations["WaitlistController_get"];
105
+ put?: never;
106
+ post?: never;
107
+ /** Delete a waitlist (cascades to entries) */
108
+ delete: operations["WaitlistController_remove"];
109
+ options?: never;
110
+ head?: never;
111
+ /** Update waitlist metadata and settings */
112
+ patch: operations["WaitlistController_update"];
113
+ trace?: never;
114
+ };
115
+ "/v1/workspaces/{workspace_id}/waitlists/{id}/status": {
116
+ parameters: {
117
+ query?: never;
118
+ header?: never;
119
+ path?: never;
120
+ cookie?: never;
121
+ };
122
+ get?: never;
123
+ put?: never;
124
+ post?: never;
125
+ delete?: never;
126
+ options?: never;
127
+ head?: never;
128
+ /** Change waitlist status */
129
+ patch: operations["WaitlistController_updateStatus"];
130
+ trace?: never;
131
+ };
132
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/analytics": {
133
+ parameters: {
134
+ query?: never;
135
+ header?: never;
136
+ path?: never;
137
+ cookie?: never;
138
+ };
139
+ /** Aggregate counts, viral coefficient, top referrers + referrals */
140
+ get: operations["AnalyticsController_get"];
141
+ put?: never;
142
+ post?: never;
143
+ delete?: never;
144
+ options?: never;
145
+ head?: never;
146
+ patch?: never;
147
+ trace?: never;
148
+ };
149
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/analytics/timeline": {
150
+ parameters: {
151
+ query?: never;
152
+ header?: never;
153
+ path?: never;
154
+ cookie?: never;
155
+ };
156
+ /** Daily-bucketed signup timeline (UTC, dense — zero-count days included) */
157
+ get: operations["AnalyticsController_timeline"];
158
+ put?: never;
159
+ post?: never;
160
+ delete?: never;
161
+ options?: never;
162
+ head?: never;
163
+ patch?: never;
164
+ trace?: never;
165
+ };
166
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries": {
167
+ parameters: {
168
+ query?: never;
169
+ header?: never;
170
+ path?: never;
171
+ cookie?: never;
172
+ };
173
+ /** List entries on a waitlist (paginated) */
174
+ get: operations["EntryController_list"];
175
+ put?: never;
176
+ post?: never;
177
+ delete?: never;
178
+ options?: never;
179
+ head?: never;
180
+ patch?: never;
181
+ trace?: never;
182
+ };
183
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries/bulk": {
184
+ parameters: {
185
+ query?: never;
186
+ header?: never;
187
+ path?: never;
188
+ cookie?: never;
189
+ };
190
+ get?: never;
191
+ put?: never;
192
+ /** Bulk-apply approve / reject / invite-to-app to multiple entries at once. Capped at 100 ids per call. Processed serially server-side; per-row results are returned so the UI can render partial successes. */
193
+ post: operations["EntryController_bulk"];
194
+ delete?: never;
195
+ options?: never;
196
+ head?: never;
197
+ patch?: never;
198
+ trace?: never;
199
+ };
200
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries/count": {
201
+ parameters: {
202
+ query?: never;
203
+ header?: never;
204
+ path?: never;
205
+ cookie?: never;
206
+ };
207
+ /** Total entry count for a waitlist */
208
+ get: operations["EntryController_count"];
209
+ put?: never;
210
+ post?: never;
211
+ delete?: never;
212
+ options?: never;
213
+ head?: never;
214
+ patch?: never;
215
+ trace?: never;
216
+ };
217
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries/export.csv": {
218
+ parameters: {
219
+ query?: never;
220
+ header?: never;
221
+ path?: never;
222
+ cookie?: never;
223
+ };
224
+ /** Stream every entry as CSV (admin export) */
225
+ get: operations["EntryController_exportCsv"];
226
+ put?: never;
227
+ post?: never;
228
+ delete?: never;
229
+ options?: never;
230
+ head?: never;
231
+ patch?: never;
232
+ trace?: never;
233
+ };
234
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries/{entry_id}": {
235
+ parameters: {
236
+ query?: never;
237
+ header?: never;
238
+ path?: never;
239
+ cookie?: never;
240
+ };
241
+ /** Get a single entry */
242
+ get: operations["EntryController_get"];
243
+ put?: never;
244
+ post?: never;
245
+ /** Delete an entry (positions are not renumbered) */
246
+ delete: operations["EntryController_remove"];
247
+ options?: never;
248
+ head?: never;
249
+ /** Approve or reject an entry */
250
+ patch: operations["EntryController_updateStatus"];
251
+ trace?: never;
252
+ };
253
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/entries/{entry_id}/invite-to-app": {
254
+ parameters: {
255
+ query?: never;
256
+ header?: never;
257
+ path?: never;
258
+ cookie?: never;
259
+ };
260
+ get?: never;
261
+ put?: never;
262
+ /** Invite an approved entry into a linked Auth consumer app (one-click cross-product handoff) */
263
+ post: operations["EntryController_inviteToApp"];
264
+ delete?: never;
265
+ options?: never;
266
+ head?: never;
267
+ patch?: never;
268
+ trace?: never;
269
+ };
270
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/variants": {
271
+ parameters: {
272
+ query?: never;
273
+ header?: never;
274
+ path?: never;
275
+ cookie?: never;
276
+ };
277
+ /** List all variants on a waitlist */
278
+ get: operations["VariantController_list"];
279
+ put?: never;
280
+ /** Create a variant */
281
+ post: operations["VariantController_create"];
282
+ delete?: never;
283
+ options?: never;
284
+ head?: never;
285
+ patch?: never;
286
+ trace?: never;
287
+ };
288
+ "/v1/workspaces/{workspace_id}/waitlists/{waitlist_id}/variants/{id}": {
289
+ parameters: {
290
+ query?: never;
291
+ header?: never;
292
+ path?: never;
293
+ cookie?: never;
294
+ };
295
+ get?: never;
296
+ put?: never;
297
+ post?: never;
298
+ /** Delete a variant */
299
+ delete: operations["VariantController_remove"];
300
+ options?: never;
301
+ head?: never;
302
+ /** Update a variant (locale, copy, weight, active) */
303
+ patch: operations["VariantController_update"];
304
+ trace?: never;
305
+ };
306
+ "/v1/workspaces/{workspace_id}/webhooks": {
307
+ parameters: {
308
+ query?: never;
309
+ header?: never;
310
+ path?: never;
311
+ cookie?: never;
312
+ };
313
+ /** List webhooks for the workspace (secrets masked) */
314
+ get: operations["WebhookController_list"];
315
+ put?: never;
316
+ /** Create a workspace webhook. The response includes the per-row signing secret in clear EXACTLY ONCE — copy it now. */
317
+ post: operations["WebhookController_create"];
318
+ delete?: never;
319
+ options?: never;
320
+ head?: never;
321
+ patch?: never;
322
+ trace?: never;
323
+ };
324
+ "/v1/workspaces/{workspace_id}/webhooks/{id}": {
325
+ parameters: {
326
+ query?: never;
327
+ header?: never;
328
+ path?: never;
329
+ cookie?: never;
330
+ };
331
+ /** Get a webhook (secret masked) */
332
+ get: operations["WebhookController_get"];
333
+ put?: never;
334
+ post?: never;
335
+ /** Delete a webhook */
336
+ delete: operations["WebhookController_remove"];
337
+ options?: never;
338
+ head?: never;
339
+ /** Update url / events / active flag */
340
+ patch: operations["WebhookController_update"];
341
+ trace?: never;
342
+ };
343
+ "/v1/workspaces/{workspace_id}/webhooks/{id}/deliveries": {
344
+ parameters: {
345
+ query?: never;
346
+ header?: never;
347
+ path?: never;
348
+ cookie?: never;
349
+ };
350
+ /** Recent delivery attempts for a webhook (default 50, max 200, newest first) */
351
+ get: operations["WebhookController_recentDeliveries"];
352
+ put?: never;
353
+ post?: never;
354
+ delete?: never;
355
+ options?: never;
356
+ head?: never;
357
+ patch?: never;
358
+ trace?: never;
359
+ };
360
+ "/v1/workspaces/{workspace_id}/webhooks/{id}/rotate-secret": {
361
+ parameters: {
362
+ query?: never;
363
+ header?: never;
364
+ path?: never;
365
+ cookie?: never;
366
+ };
367
+ get?: never;
368
+ put?: never;
369
+ /** Rotate the signing secret. Returns the new secret in clear EXACTLY ONCE. */
370
+ post: operations["WebhookController_rotateSecret"];
371
+ delete?: never;
372
+ options?: never;
373
+ head?: never;
374
+ patch?: never;
375
+ trace?: never;
376
+ };
377
+ "/v1/workspaces/{workspace_id}/webhooks/{id}/test": {
378
+ parameters: {
379
+ query?: never;
380
+ header?: never;
381
+ path?: never;
382
+ cookie?: never;
383
+ };
384
+ get?: never;
385
+ put?: never;
386
+ /** Fire a synthetic test event to this webhook (asynchronous; check the destination logs) */
387
+ post: operations["WebhookController_fireTest"];
388
+ delete?: never;
389
+ options?: never;
390
+ head?: never;
391
+ patch?: never;
392
+ trace?: never;
393
+ };
394
+ }
395
+ interface components {
396
+ schemas: {
397
+ BulkEntryActionDto: {
398
+ /**
399
+ * @description Action to apply to every id.
400
+ * @example approve
401
+ * @enum {string}
402
+ */
403
+ action: "approve" | "reject" | "invite-to-app";
404
+ /**
405
+ * @description Auth app slug override for `action: invite-to-app`. When omitted, falls back to the workspace Waitlist settings default (`default_heimdall_app_slug`). Ignored for approve/reject.
406
+ * @example acme-product
407
+ */
408
+ app_slug?: string;
409
+ /**
410
+ * @description Entry UUIDs to act on in this batch. Capped at 100 per call; the request is processed serially and per-row results are returned. De-duped server-side.
411
+ * @example [
412
+ * "11111111-1111-1111-1111-111111111111",
413
+ * "22222222-2222-2222-2222-222222222222"
414
+ * ]
415
+ */
416
+ ids: string[];
417
+ /**
418
+ * @description Whether to send the approval email with the invite link baked in. Defaults to `true`. Ignored for approve/reject.
419
+ * @default true
420
+ */
421
+ send_email: boolean;
422
+ };
423
+ CreateEntryDto: {
424
+ /**
425
+ * @description Email address
426
+ * @example ada@example.com
427
+ */
428
+ email: string;
429
+ /** @description Free-text product interest */
430
+ interest?: string;
431
+ /** @description Custom field values */
432
+ metadata?: Record<string, never>;
433
+ /**
434
+ * @description Full name
435
+ * @example Ada Lovelace
436
+ */
437
+ name: string;
438
+ /** @description reCAPTCHA v3 token; verified server-side when the waitlist has settings.recaptcha_site_key */
439
+ recaptcha_token?: string;
440
+ /** @description Referral code from a prior signup; bumps that signup’s position when honoured */
441
+ referral_code?: string;
442
+ /** @description How they heard about it */
443
+ referrer?: string;
444
+ /**
445
+ * Format: uuid
446
+ * @description Variant id this submission was attributed to. Customer frontends fetch the active variant from `GET /v1/waitlists/:workspaceSlug/:waitlistSlug` and round-trip it here on POST so per-variant conversion can be computed without a separate impressions table.
447
+ */
448
+ variant_id?: string;
449
+ };
450
+ CreateVariantDto: {
451
+ /** @default true */
452
+ active: boolean;
453
+ /** @description Copy overrides. Recognised keys: display_name, description, confirmation_message. Unknown keys are dropped on the public render. */
454
+ copy: components["schemas"]["VariantCopyDto"];
455
+ /** @enum {string} */
456
+ kind: "ab" | "locale";
457
+ /**
458
+ * @description BCP-47 locale tag. For ab variants this is the locale they target; for locale variants this is the locale they serve. Case is normalised on the public side.
459
+ * @example en
460
+ */
461
+ locale: string;
462
+ /**
463
+ * @description Relative weight inside the ab pool. Ignored when kind=locale. Default 1.
464
+ * @default 1
465
+ */
466
+ weight: number;
467
+ };
468
+ CreateWaitlistDto: {
469
+ /** @description Description returned in the public waitlist payload — customer frontends typically render it under the display name on their signup form. */
470
+ description?: string;
471
+ /**
472
+ * @description Display name
473
+ * @example Early Access Program
474
+ */
475
+ display_name: string;
476
+ /** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost) */
477
+ settings?: Record<string, never>;
478
+ /**
479
+ * @description URL-safe slug
480
+ * @example early-access
481
+ */
482
+ slug: string;
483
+ };
484
+ CreateWebhookDto: {
485
+ /** @description Disabled webhooks store events but never deliver */
486
+ active?: boolean;
487
+ /**
488
+ * @description Events to subscribe to
489
+ * @example [
490
+ * "entry.created",
491
+ * "entry.approved"
492
+ * ]
493
+ */
494
+ events: ("entry.created" | "entry.approved" | "entry.rejected")[];
495
+ /** @description Destination URL (must be https in prod) */
496
+ url: string;
497
+ };
498
+ EntryListPaginationDto: {
499
+ has_more: boolean;
500
+ next_cursor: string | null;
501
+ };
502
+ EntryListResponseDto: {
503
+ data: components["schemas"]["EntryResponseDto"][];
504
+ pagination: components["schemas"]["EntryListPaginationDto"];
505
+ };
506
+ EntryResponseDto: {
507
+ created_at: string;
508
+ email: string;
509
+ id: string;
510
+ interest: string | null;
511
+ invited_at: string | null;
512
+ invited_to_app_slug: string | null;
513
+ metadata: Record<string, never>;
514
+ name: string;
515
+ position: number;
516
+ referral_code: string;
517
+ referral_count: number;
518
+ referred_by_entry_id: string | null;
519
+ referrer: string | null;
520
+ /** @enum {string} */
521
+ status: "pending" | "approved" | "rejected";
522
+ updated_at: string;
523
+ waitlist_id: string;
524
+ workspace_id: string;
525
+ };
526
+ InviteToAppDto: {
527
+ /** @description Auth app slug to invite into; defaults to the workspace Waitlist settings default (`default_heimdall_app_slug`) */
528
+ app_slug?: string;
529
+ /**
530
+ * @description Send the approval email with the Auth invite link baked in
531
+ * @default true
532
+ */
533
+ send_email: boolean;
534
+ };
535
+ TestWebhookDto: {
536
+ /**
537
+ * @description Event type to fire as a synthetic test
538
+ * @enum {string}
539
+ */
540
+ event: "entry.created" | "entry.approved" | "entry.rejected";
541
+ /** @description Waitlist UUID to reference in the synthetic payload. Defaults to a placeholder UUID when omitted. */
542
+ waitlist_id?: string;
543
+ };
544
+ UpdateEntryStatusDto: {
545
+ /**
546
+ * @description Target status
547
+ * @enum {string}
548
+ */
549
+ status: "approved" | "rejected";
550
+ };
551
+ UpdateSettingsDto: {
552
+ /** @description Mail template name used for entry.approved notifications. Must already exist in the workspace template store. */
553
+ approved_template_name?: string | null;
554
+ /** @description Logo URL returned in the public waitlist payload. Customer frontends render it on their own signup form. */
555
+ brand_logo_url?: string;
556
+ /** @description Brand name returned in the public waitlist payload. Customer frontends render it on their own signup form. */
557
+ brand_name?: string;
558
+ /** @description Auth consumer-app slug to invite approved entries into. null clears the link. */
559
+ default_heimdall_app_slug?: string | null;
560
+ /** @description Verified sender address used as the From envelope on Waitlist notifications. Must belong to default_sender_domain_id. null clears the override. */
561
+ default_sender_address?: string | null;
562
+ /** @description Mail domain UUID to use as default sender for Waitlist notifications. null clears the override. */
563
+ default_sender_domain_id?: string | null;
564
+ /** @description Route Waitlist notifications through the Mail service (workspace sender domain + per-event template selection) instead of staying silent. Requires default_sender_domain_id, default_sender_address, and a template name for every supported event. Default false; when off, Waitlist sends no notification emails and the customer is expected to handle email via the webhook lane. */
565
+ notifications_via_envoi?: boolean;
566
+ /** @description Primary brand colour as #RRGGBB */
567
+ primary_color?: string;
568
+ /** @description Mail template name used for entry.rejected notifications. Must already exist in the workspace template store. */
569
+ rejected_template_name?: string | null;
570
+ /** @description Mail template name used for entry.created notifications. Must already exist in the workspace template store. */
571
+ welcome_template_name?: string | null;
572
+ };
573
+ UpdateVariantDto: {
574
+ active?: boolean;
575
+ copy?: components["schemas"]["VariantCopyDto"];
576
+ locale?: string;
577
+ weight?: number;
578
+ };
579
+ UpdateWaitlistDto: {
580
+ /** @description New description */
581
+ description?: string;
582
+ /** @description New display name */
583
+ display_name?: string;
584
+ /** @description Updated settings (merged shallow) */
585
+ settings?: Record<string, never>;
586
+ };
587
+ UpdateWaitlistStatusDto: {
588
+ /**
589
+ * @description New status
590
+ * @enum {string}
591
+ */
592
+ status: "draft" | "active" | "paused" | "closed";
593
+ };
594
+ UpdateWebhookDto: {
595
+ /** @description Pause/resume the webhook */
596
+ active?: boolean;
597
+ /** @description New event subscription */
598
+ events?: ("entry.created" | "entry.approved" | "entry.rejected")[];
599
+ /** @description New URL */
600
+ url?: string;
601
+ };
602
+ VariantCopyDto: {
603
+ confirmation_message?: string;
604
+ description?: string;
605
+ display_name?: string;
606
+ };
607
+ VariantListResponseDto: {
608
+ data: components["schemas"]["VariantResponseDto"][];
609
+ };
610
+ VariantResponseDto: {
611
+ active: boolean;
612
+ copy: Record<string, never>;
613
+ created_at: string;
614
+ id: string;
615
+ /** @enum {string} */
616
+ kind: "ab" | "locale";
617
+ locale: string;
618
+ waitlist_id: string;
619
+ weight: number;
620
+ };
621
+ WaitlistListPaginationDto: {
622
+ has_more: boolean;
623
+ next_cursor: string | null;
624
+ };
625
+ WaitlistListResponseDto: {
626
+ data: components["schemas"]["WaitlistResponseDto"][];
627
+ pagination: components["schemas"]["WaitlistListPaginationDto"];
628
+ };
629
+ WaitlistResponseDto: {
630
+ created_at: string;
631
+ created_by: string;
632
+ description: string | null;
633
+ /** @example Early Access Program */
634
+ display_name: string;
635
+ /** @example b1a4... */
636
+ id: string;
637
+ previous_workspace_slug: string | null;
638
+ /** @description Waitlist settings (max_entries, approval_required, custom_fields, confirmation_message, referral_boost). */
639
+ settings: Record<string, never>;
640
+ /** @example early-access */
641
+ slug: string;
642
+ /** @enum {string} */
643
+ status: "draft" | "active" | "paused" | "closed";
644
+ updated_at: string;
645
+ /** @example b1a4... */
646
+ workspace_id: string;
647
+ /** @example acme */
648
+ workspace_slug: string;
649
+ };
650
+ WebhookCreateResponseDto: {
651
+ active: boolean;
652
+ auto_disabled_at: string | null;
653
+ created_at: string;
654
+ events: ("entry.created" | "entry.approved" | "entry.rejected")[];
655
+ failure_count: number;
656
+ first_failure_at: string | null;
657
+ id: string;
658
+ last_attempt_at: string | null;
659
+ last_status_code: number | null;
660
+ /** @description Plaintext signing secret returned EXACTLY ONCE on create + rotate. Persist immediately — it does not appear on subsequent GETs. */
661
+ signing_secret: string;
662
+ url: string;
663
+ workspace_id: string;
664
+ };
665
+ WebhookListResponseDto: {
666
+ data: components["schemas"]["WebhookResponseDto"][];
667
+ };
668
+ WebhookResponseDto: {
669
+ active: boolean;
670
+ auto_disabled_at: string | null;
671
+ created_at: string;
672
+ events: ("entry.created" | "entry.approved" | "entry.rejected")[];
673
+ failure_count: number;
674
+ first_failure_at: string | null;
675
+ id: string;
676
+ last_attempt_at: string | null;
677
+ last_status_code: number | null;
678
+ url: string;
679
+ workspace_id: string;
680
+ };
681
+ };
682
+ responses: never;
683
+ parameters: never;
684
+ requestBodies: never;
685
+ headers: never;
686
+ pathItems: never;
687
+ }
688
+ interface operations {
689
+ PublicWaitlistController_getPublic: {
690
+ parameters: {
691
+ query?: {
692
+ /** @description BCP-47 locale tag (e.g. `en`, `pt-BR`). Wins over Accept-Language when picking the variant. */
693
+ lang?: string;
694
+ };
695
+ header?: never;
696
+ path: {
697
+ workspace_slug: string;
698
+ waitlist_slug: string;
699
+ };
700
+ cookie?: never;
701
+ };
702
+ requestBody?: never;
703
+ responses: {
704
+ /** @description Public waitlist info */
705
+ 200: {
706
+ headers: {
707
+ [name: string]: unknown;
708
+ };
709
+ content?: never;
710
+ };
711
+ /** @description Waitlist not found or not active */
712
+ 404: {
713
+ headers: {
714
+ [name: string]: unknown;
715
+ };
716
+ content?: never;
717
+ };
718
+ };
719
+ };
720
+ PublicWaitlistController_submit: {
721
+ parameters: {
722
+ query?: never;
723
+ header?: never;
724
+ path: {
725
+ workspace_slug: string;
726
+ waitlist_slug: string;
727
+ };
728
+ cookie?: never;
729
+ };
730
+ requestBody: {
731
+ content: {
732
+ "application/json": components["schemas"]["CreateEntryDto"];
733
+ };
734
+ };
735
+ responses: {
736
+ /** @description Entry created */
737
+ 201: {
738
+ headers: {
739
+ [name: string]: unknown;
740
+ };
741
+ content?: never;
742
+ };
743
+ /** @description Validation or spam check failed */
744
+ 400: {
745
+ headers: {
746
+ [name: string]: unknown;
747
+ };
748
+ content?: never;
749
+ };
750
+ /** @description Waitlist not found */
751
+ 404: {
752
+ headers: {
753
+ [name: string]: unknown;
754
+ };
755
+ content?: never;
756
+ };
757
+ /** @description Email already on this waitlist */
758
+ 409: {
759
+ headers: {
760
+ [name: string]: unknown;
761
+ };
762
+ content?: never;
763
+ };
764
+ /** @description Waitlist is not active or is full */
765
+ 422: {
766
+ headers: {
767
+ [name: string]: unknown;
768
+ };
769
+ content?: never;
770
+ };
771
+ /** @description Too many requests from this IP */
772
+ 429: {
773
+ headers: {
774
+ [name: string]: unknown;
775
+ };
776
+ content?: never;
777
+ };
778
+ };
779
+ };
780
+ PublicWaitlistController_leaderboard: {
781
+ parameters: {
782
+ query?: {
783
+ /** @description Number of rows (1-50, default 50) */
784
+ limit?: string;
785
+ };
786
+ header?: never;
787
+ path: {
788
+ workspace_slug: string;
789
+ waitlist_slug: string;
790
+ };
791
+ cookie?: never;
792
+ };
793
+ requestBody?: never;
794
+ responses: {
795
+ /** @description Array of `{ position, referral_count, masked_email }` */
796
+ 200: {
797
+ headers: {
798
+ [name: string]: unknown;
799
+ };
800
+ content?: never;
801
+ };
802
+ /** @description Waitlist not found or not active */
803
+ 404: {
804
+ headers: {
805
+ [name: string]: unknown;
806
+ };
807
+ content?: never;
808
+ };
809
+ };
810
+ };
811
+ SettingsController_get: {
812
+ parameters: {
813
+ query?: never;
814
+ header?: never;
815
+ path: {
816
+ workspace_id: string;
817
+ };
818
+ cookie?: never;
819
+ };
820
+ requestBody?: never;
821
+ responses: {
822
+ /** @description Workspace Waitlist settings. */
823
+ 200: {
824
+ headers: {
825
+ [name: string]: unknown;
826
+ };
827
+ content?: never;
828
+ };
829
+ /** @description Caller lacks `waitlist.settings.read` on the workspace. */
830
+ 403: {
831
+ headers: {
832
+ [name: string]: unknown;
833
+ };
834
+ content?: never;
835
+ };
836
+ /** @description Workspace does not exist or is not Waitlist-enabled. */
837
+ 404: {
838
+ headers: {
839
+ [name: string]: unknown;
840
+ };
841
+ content?: never;
842
+ };
843
+ };
844
+ };
845
+ SettingsController_update: {
846
+ parameters: {
847
+ query?: never;
848
+ header?: never;
849
+ path: {
850
+ workspace_id: string;
851
+ };
852
+ cookie?: never;
853
+ };
854
+ requestBody: {
855
+ content: {
856
+ "application/json": components["schemas"]["UpdateSettingsDto"];
857
+ };
858
+ };
859
+ responses: {
860
+ /** @description Updated workspace Waitlist settings. */
861
+ 200: {
862
+ headers: {
863
+ [name: string]: unknown;
864
+ };
865
+ content?: never;
866
+ };
867
+ /** @description Validation failure on the patch body (per `UpdateSettingsDto`). */
868
+ 400: {
869
+ headers: {
870
+ [name: string]: unknown;
871
+ };
872
+ content?: never;
873
+ };
874
+ /** @description Caller lacks `waitlist.settings.update` on the workspace. */
875
+ 403: {
876
+ headers: {
877
+ [name: string]: unknown;
878
+ };
879
+ content?: never;
880
+ };
881
+ /** @description Workspace does not exist or is not Waitlist-enabled. */
882
+ 404: {
883
+ headers: {
884
+ [name: string]: unknown;
885
+ };
886
+ content?: never;
887
+ };
888
+ };
889
+ };
890
+ WaitlistController_list: {
891
+ parameters: {
892
+ query?: {
893
+ limit?: number;
894
+ /** @description Opaque cursor for pagination */
895
+ cursor?: string;
896
+ /** @description Filter by status */
897
+ status?: string;
898
+ };
899
+ header?: never;
900
+ path: {
901
+ workspace_id: string;
902
+ };
903
+ cookie?: never;
904
+ };
905
+ requestBody?: never;
906
+ responses: {
907
+ /** @description Page of waitlists. */
908
+ 200: {
909
+ headers: {
910
+ [name: string]: unknown;
911
+ };
912
+ content: {
913
+ "application/json": components["schemas"]["WaitlistListResponseDto"];
914
+ };
915
+ };
916
+ };
917
+ };
918
+ WaitlistController_create: {
919
+ parameters: {
920
+ query?: never;
921
+ header?: {
922
+ /** @description Stripe-style idempotency key. Waitlist creation provisions a non-trivial sub-tree (variant, default referral settings, etc.); a retry without this header creates a second waitlist sharing the same name slug. 24h TTL. */
923
+ "Idempotency-Key"?: string;
924
+ };
925
+ path: {
926
+ workspace_id: string;
927
+ };
928
+ cookie?: never;
929
+ };
930
+ requestBody: {
931
+ content: {
932
+ "application/json": components["schemas"]["CreateWaitlistDto"];
933
+ };
934
+ };
935
+ responses: {
936
+ /** @description Waitlist created. */
937
+ 201: {
938
+ headers: {
939
+ [name: string]: unknown;
940
+ };
941
+ content: {
942
+ "application/json": components["schemas"]["WaitlistResponseDto"];
943
+ };
944
+ };
945
+ /** @description Validation failure. */
946
+ 400: {
947
+ headers: {
948
+ [name: string]: unknown;
949
+ };
950
+ content?: never;
951
+ };
952
+ /** @description Caller lacks `waitlist.create`, or workspace has not enabled the `waitlist` service. */
953
+ 403: {
954
+ headers: {
955
+ [name: string]: unknown;
956
+ };
957
+ content?: never;
958
+ };
959
+ /** @description Slug already taken in this workspace. */
960
+ 409: {
961
+ headers: {
962
+ [name: string]: unknown;
963
+ };
964
+ content?: never;
965
+ };
966
+ };
967
+ };
968
+ WaitlistController_get: {
969
+ parameters: {
970
+ query?: never;
971
+ header?: never;
972
+ path: {
973
+ id: string;
974
+ };
975
+ cookie?: never;
976
+ };
977
+ requestBody?: never;
978
+ responses: {
979
+ /** @description Waitlist row. */
980
+ 200: {
981
+ headers: {
982
+ [name: string]: unknown;
983
+ };
984
+ content: {
985
+ "application/json": components["schemas"]["WaitlistResponseDto"];
986
+ };
987
+ };
988
+ /** @description Waitlist not found. */
989
+ 404: {
990
+ headers: {
991
+ [name: string]: unknown;
992
+ };
993
+ content?: never;
994
+ };
995
+ };
996
+ };
997
+ WaitlistController_remove: {
998
+ parameters: {
999
+ query?: never;
1000
+ header?: never;
1001
+ path: {
1002
+ id: string;
1003
+ };
1004
+ cookie?: never;
1005
+ };
1006
+ requestBody?: never;
1007
+ responses: {
1008
+ /** @description Waitlist deleted. */
1009
+ 204: {
1010
+ headers: {
1011
+ [name: string]: unknown;
1012
+ };
1013
+ content?: never;
1014
+ };
1015
+ /** @description Caller lacks `waitlist.delete`. */
1016
+ 403: {
1017
+ headers: {
1018
+ [name: string]: unknown;
1019
+ };
1020
+ content?: never;
1021
+ };
1022
+ /** @description Waitlist not found. */
1023
+ 404: {
1024
+ headers: {
1025
+ [name: string]: unknown;
1026
+ };
1027
+ content?: never;
1028
+ };
1029
+ };
1030
+ };
1031
+ WaitlistController_update: {
1032
+ parameters: {
1033
+ query?: never;
1034
+ header?: never;
1035
+ path: {
1036
+ id: string;
1037
+ };
1038
+ cookie?: never;
1039
+ };
1040
+ requestBody: {
1041
+ content: {
1042
+ "application/json": components["schemas"]["UpdateWaitlistDto"];
1043
+ };
1044
+ };
1045
+ responses: {
1046
+ /** @description Waitlist updated. */
1047
+ 200: {
1048
+ headers: {
1049
+ [name: string]: unknown;
1050
+ };
1051
+ content: {
1052
+ "application/json": components["schemas"]["WaitlistResponseDto"];
1053
+ };
1054
+ };
1055
+ /** @description Validation failure. */
1056
+ 400: {
1057
+ headers: {
1058
+ [name: string]: unknown;
1059
+ };
1060
+ content?: never;
1061
+ };
1062
+ /** @description Waitlist not found. */
1063
+ 404: {
1064
+ headers: {
1065
+ [name: string]: unknown;
1066
+ };
1067
+ content?: never;
1068
+ };
1069
+ };
1070
+ };
1071
+ WaitlistController_updateStatus: {
1072
+ parameters: {
1073
+ query?: never;
1074
+ header?: never;
1075
+ path: {
1076
+ id: string;
1077
+ };
1078
+ cookie?: never;
1079
+ };
1080
+ requestBody: {
1081
+ content: {
1082
+ "application/json": components["schemas"]["UpdateWaitlistStatusDto"];
1083
+ };
1084
+ };
1085
+ responses: {
1086
+ /** @description Status updated. */
1087
+ 200: {
1088
+ headers: {
1089
+ [name: string]: unknown;
1090
+ };
1091
+ content: {
1092
+ "application/json": components["schemas"]["WaitlistResponseDto"];
1093
+ };
1094
+ };
1095
+ /** @description Invalid status transition. */
1096
+ 400: {
1097
+ headers: {
1098
+ [name: string]: unknown;
1099
+ };
1100
+ content?: never;
1101
+ };
1102
+ /** @description Waitlist not found. */
1103
+ 404: {
1104
+ headers: {
1105
+ [name: string]: unknown;
1106
+ };
1107
+ content?: never;
1108
+ };
1109
+ };
1110
+ };
1111
+ AnalyticsController_get: {
1112
+ parameters: {
1113
+ query?: never;
1114
+ header?: never;
1115
+ path: {
1116
+ workspace_id: string;
1117
+ waitlist_id: string;
1118
+ };
1119
+ cookie?: never;
1120
+ };
1121
+ requestBody?: never;
1122
+ responses: {
1123
+ /** @description Aggregated analytics payload for the waitlist. */
1124
+ 200: {
1125
+ headers: {
1126
+ [name: string]: unknown;
1127
+ };
1128
+ content?: never;
1129
+ };
1130
+ /** @description Caller lacks `waitlist.read` on the workspace. */
1131
+ 403: {
1132
+ headers: {
1133
+ [name: string]: unknown;
1134
+ };
1135
+ content?: never;
1136
+ };
1137
+ /** @description Waitlist does not exist or is not in the path workspace. */
1138
+ 404: {
1139
+ headers: {
1140
+ [name: string]: unknown;
1141
+ };
1142
+ content?: never;
1143
+ };
1144
+ };
1145
+ };
1146
+ AnalyticsController_timeline: {
1147
+ parameters: {
1148
+ query: {
1149
+ /** @description ISO-8601 inclusive start */
1150
+ since: string;
1151
+ /** @description ISO-8601 exclusive end */
1152
+ until: string;
1153
+ };
1154
+ header?: never;
1155
+ path: {
1156
+ workspace_id: string;
1157
+ waitlist_id: string;
1158
+ };
1159
+ cookie?: never;
1160
+ };
1161
+ requestBody?: never;
1162
+ responses: {
1163
+ /** @description Daily timeline array, oldest first, zero-count days included. */
1164
+ 200: {
1165
+ headers: {
1166
+ [name: string]: unknown;
1167
+ };
1168
+ content?: never;
1169
+ };
1170
+ /** @description `since` / `until` missing, malformed, or `until <= since`. */
1171
+ 400: {
1172
+ headers: {
1173
+ [name: string]: unknown;
1174
+ };
1175
+ content?: never;
1176
+ };
1177
+ /** @description Caller lacks `waitlist.read` on the workspace. */
1178
+ 403: {
1179
+ headers: {
1180
+ [name: string]: unknown;
1181
+ };
1182
+ content?: never;
1183
+ };
1184
+ /** @description Waitlist does not exist or is not in the path workspace. */
1185
+ 404: {
1186
+ headers: {
1187
+ [name: string]: unknown;
1188
+ };
1189
+ content?: never;
1190
+ };
1191
+ };
1192
+ };
1193
+ EntryController_list: {
1194
+ parameters: {
1195
+ query?: {
1196
+ limit?: number;
1197
+ /** @description Opaque cursor for pagination */
1198
+ cursor?: string;
1199
+ /** @description Filter by status */
1200
+ status?: string;
1201
+ };
1202
+ header?: never;
1203
+ path: {
1204
+ workspace_id: string;
1205
+ waitlist_id: string;
1206
+ };
1207
+ cookie?: never;
1208
+ };
1209
+ requestBody?: never;
1210
+ responses: {
1211
+ /** @description Page of entries with pagination cursor. */
1212
+ 200: {
1213
+ headers: {
1214
+ [name: string]: unknown;
1215
+ };
1216
+ content: {
1217
+ "application/json": components["schemas"]["EntryListResponseDto"];
1218
+ };
1219
+ };
1220
+ /** @description Caller lacks `entry.read`, or workspace has not enabled the `waitlist` service. */
1221
+ 403: {
1222
+ headers: {
1223
+ [name: string]: unknown;
1224
+ };
1225
+ content?: never;
1226
+ };
1227
+ /** @description Waitlist not found in this workspace. */
1228
+ 404: {
1229
+ headers: {
1230
+ [name: string]: unknown;
1231
+ };
1232
+ content?: never;
1233
+ };
1234
+ };
1235
+ };
1236
+ EntryController_bulk: {
1237
+ parameters: {
1238
+ query?: never;
1239
+ header?: never;
1240
+ path: {
1241
+ workspace_id: string;
1242
+ waitlist_id: string;
1243
+ };
1244
+ cookie?: never;
1245
+ };
1246
+ requestBody: {
1247
+ content: {
1248
+ "application/json": components["schemas"]["BulkEntryActionDto"];
1249
+ };
1250
+ };
1251
+ responses: {
1252
+ /** @description `{ requested, succeeded, failed, results }`. Each row in `results` carries `{ id, status: "ok" | "error", error?: { code, message } }` so a partial failure (one bad id) doesn't fail the whole batch. */
1253
+ 200: {
1254
+ headers: {
1255
+ [name: string]: unknown;
1256
+ };
1257
+ content?: never;
1258
+ };
1259
+ /** @description Empty `ids`, more than 100 ids, or unknown action. */
1260
+ 400: {
1261
+ headers: {
1262
+ [name: string]: unknown;
1263
+ };
1264
+ content?: never;
1265
+ };
1266
+ /** @description Caller lacks `entry.update`. */
1267
+ 403: {
1268
+ headers: {
1269
+ [name: string]: unknown;
1270
+ };
1271
+ content?: never;
1272
+ };
1273
+ /** @description Waitlist not found. */
1274
+ 404: {
1275
+ headers: {
1276
+ [name: string]: unknown;
1277
+ };
1278
+ content?: never;
1279
+ };
1280
+ };
1281
+ };
1282
+ EntryController_count: {
1283
+ parameters: {
1284
+ query?: never;
1285
+ header?: never;
1286
+ path: {
1287
+ workspace_id: string;
1288
+ waitlist_id: string;
1289
+ };
1290
+ cookie?: never;
1291
+ };
1292
+ requestBody?: never;
1293
+ responses: {
1294
+ 200: {
1295
+ headers: {
1296
+ [name: string]: unknown;
1297
+ };
1298
+ content?: never;
1299
+ };
1300
+ };
1301
+ };
1302
+ EntryController_exportCsv: {
1303
+ parameters: {
1304
+ query?: never;
1305
+ header?: never;
1306
+ path: {
1307
+ workspace_id: string;
1308
+ waitlist_id: string;
1309
+ };
1310
+ cookie?: never;
1311
+ };
1312
+ requestBody?: never;
1313
+ responses: {
1314
+ /** @description CSV stream */
1315
+ 200: {
1316
+ headers: {
1317
+ [name: string]: unknown;
1318
+ };
1319
+ content?: never;
1320
+ };
1321
+ };
1322
+ };
1323
+ EntryController_get: {
1324
+ parameters: {
1325
+ query?: never;
1326
+ header?: never;
1327
+ path: {
1328
+ workspace_id: string;
1329
+ waitlist_id: string;
1330
+ entry_id: string;
1331
+ };
1332
+ cookie?: never;
1333
+ };
1334
+ requestBody?: never;
1335
+ responses: {
1336
+ /** @description Entry row. */
1337
+ 200: {
1338
+ headers: {
1339
+ [name: string]: unknown;
1340
+ };
1341
+ content: {
1342
+ "application/json": components["schemas"]["EntryResponseDto"];
1343
+ };
1344
+ };
1345
+ /** @description Entry not found. */
1346
+ 404: {
1347
+ headers: {
1348
+ [name: string]: unknown;
1349
+ };
1350
+ content?: never;
1351
+ };
1352
+ };
1353
+ };
1354
+ EntryController_remove: {
1355
+ parameters: {
1356
+ query?: never;
1357
+ header?: never;
1358
+ path: {
1359
+ workspace_id: string;
1360
+ waitlist_id: string;
1361
+ entry_id: string;
1362
+ };
1363
+ cookie?: never;
1364
+ };
1365
+ requestBody?: never;
1366
+ responses: {
1367
+ /** @description Entry deleted. */
1368
+ 204: {
1369
+ headers: {
1370
+ [name: string]: unknown;
1371
+ };
1372
+ content?: never;
1373
+ };
1374
+ /** @description Caller lacks `entry.update`. */
1375
+ 403: {
1376
+ headers: {
1377
+ [name: string]: unknown;
1378
+ };
1379
+ content?: never;
1380
+ };
1381
+ /** @description Entry not found. */
1382
+ 404: {
1383
+ headers: {
1384
+ [name: string]: unknown;
1385
+ };
1386
+ content?: never;
1387
+ };
1388
+ };
1389
+ };
1390
+ EntryController_updateStatus: {
1391
+ parameters: {
1392
+ query?: never;
1393
+ header?: never;
1394
+ path: {
1395
+ workspace_id: string;
1396
+ waitlist_id: string;
1397
+ entry_id: string;
1398
+ };
1399
+ cookie?: never;
1400
+ };
1401
+ requestBody: {
1402
+ content: {
1403
+ "application/json": components["schemas"]["UpdateEntryStatusDto"];
1404
+ };
1405
+ };
1406
+ responses: {
1407
+ /** @description Entry status updated. */
1408
+ 200: {
1409
+ headers: {
1410
+ [name: string]: unknown;
1411
+ };
1412
+ content: {
1413
+ "application/json": components["schemas"]["EntryResponseDto"];
1414
+ };
1415
+ };
1416
+ /** @description Invalid status transition. */
1417
+ 400: {
1418
+ headers: {
1419
+ [name: string]: unknown;
1420
+ };
1421
+ content?: never;
1422
+ };
1423
+ /** @description Caller lacks `entry.update`. */
1424
+ 403: {
1425
+ headers: {
1426
+ [name: string]: unknown;
1427
+ };
1428
+ content?: never;
1429
+ };
1430
+ /** @description Entry not found in this waitlist. */
1431
+ 404: {
1432
+ headers: {
1433
+ [name: string]: unknown;
1434
+ };
1435
+ content?: never;
1436
+ };
1437
+ };
1438
+ };
1439
+ EntryController_inviteToApp: {
1440
+ parameters: {
1441
+ query?: never;
1442
+ header?: never;
1443
+ path: {
1444
+ workspace_id: string;
1445
+ waitlist_id: string;
1446
+ entry_id: string;
1447
+ };
1448
+ cookie?: never;
1449
+ };
1450
+ requestBody: {
1451
+ content: {
1452
+ "application/json": components["schemas"]["InviteToAppDto"];
1453
+ };
1454
+ };
1455
+ responses: {
1456
+ /** @description Invite created in Auth */
1457
+ 200: {
1458
+ headers: {
1459
+ [name: string]: unknown;
1460
+ };
1461
+ content?: never;
1462
+ };
1463
+ /** @description No linked Auth app for this workspace */
1464
+ 422: {
1465
+ headers: {
1466
+ [name: string]: unknown;
1467
+ };
1468
+ content?: never;
1469
+ };
1470
+ };
1471
+ };
1472
+ VariantController_list: {
1473
+ parameters: {
1474
+ query?: never;
1475
+ header?: never;
1476
+ path: {
1477
+ workspace_id: string;
1478
+ waitlist_id: string;
1479
+ };
1480
+ cookie?: never;
1481
+ };
1482
+ requestBody?: never;
1483
+ responses: {
1484
+ /** @description Bare array of variants */
1485
+ 200: {
1486
+ headers: {
1487
+ [name: string]: unknown;
1488
+ };
1489
+ content: {
1490
+ "application/json": components["schemas"]["VariantListResponseDto"];
1491
+ };
1492
+ };
1493
+ };
1494
+ };
1495
+ VariantController_create: {
1496
+ parameters: {
1497
+ query?: never;
1498
+ header?: never;
1499
+ path: {
1500
+ workspace_id: string;
1501
+ waitlist_id: string;
1502
+ };
1503
+ cookie?: never;
1504
+ };
1505
+ requestBody: {
1506
+ content: {
1507
+ "application/json": components["schemas"]["CreateVariantDto"];
1508
+ };
1509
+ };
1510
+ responses: {
1511
+ /** @description Variant created */
1512
+ 201: {
1513
+ headers: {
1514
+ [name: string]: unknown;
1515
+ };
1516
+ content: {
1517
+ "application/json": components["schemas"]["VariantResponseDto"];
1518
+ };
1519
+ };
1520
+ /** @description Validation failure */
1521
+ 400: {
1522
+ headers: {
1523
+ [name: string]: unknown;
1524
+ };
1525
+ content?: never;
1526
+ };
1527
+ /** @description Waitlist not found in this workspace */
1528
+ 404: {
1529
+ headers: {
1530
+ [name: string]: unknown;
1531
+ };
1532
+ content?: never;
1533
+ };
1534
+ };
1535
+ };
1536
+ VariantController_remove: {
1537
+ parameters: {
1538
+ query?: never;
1539
+ header?: never;
1540
+ path: {
1541
+ workspace_id: string;
1542
+ waitlist_id: string;
1543
+ id: string;
1544
+ };
1545
+ cookie?: never;
1546
+ };
1547
+ requestBody?: never;
1548
+ responses: {
1549
+ /** @description Variant deleted */
1550
+ 204: {
1551
+ headers: {
1552
+ [name: string]: unknown;
1553
+ };
1554
+ content?: never;
1555
+ };
1556
+ /** @description Variant not found */
1557
+ 404: {
1558
+ headers: {
1559
+ [name: string]: unknown;
1560
+ };
1561
+ content?: never;
1562
+ };
1563
+ };
1564
+ };
1565
+ VariantController_update: {
1566
+ parameters: {
1567
+ query?: never;
1568
+ header?: never;
1569
+ path: {
1570
+ workspace_id: string;
1571
+ waitlist_id: string;
1572
+ id: string;
1573
+ };
1574
+ cookie?: never;
1575
+ };
1576
+ requestBody: {
1577
+ content: {
1578
+ "application/json": components["schemas"]["UpdateVariantDto"];
1579
+ };
1580
+ };
1581
+ responses: {
1582
+ /** @description Variant updated */
1583
+ 200: {
1584
+ headers: {
1585
+ [name: string]: unknown;
1586
+ };
1587
+ content: {
1588
+ "application/json": components["schemas"]["VariantResponseDto"];
1589
+ };
1590
+ };
1591
+ /** @description Variant not found */
1592
+ 404: {
1593
+ headers: {
1594
+ [name: string]: unknown;
1595
+ };
1596
+ content?: never;
1597
+ };
1598
+ };
1599
+ };
1600
+ WebhookController_list: {
1601
+ parameters: {
1602
+ query?: never;
1603
+ header?: never;
1604
+ path: {
1605
+ workspace_id: string;
1606
+ };
1607
+ cookie?: never;
1608
+ };
1609
+ requestBody?: never;
1610
+ responses: {
1611
+ /** @description Webhooks for the workspace. */
1612
+ 200: {
1613
+ headers: {
1614
+ [name: string]: unknown;
1615
+ };
1616
+ content: {
1617
+ "application/json": components["schemas"]["WebhookListResponseDto"];
1618
+ };
1619
+ };
1620
+ };
1621
+ };
1622
+ WebhookController_create: {
1623
+ parameters: {
1624
+ query?: never;
1625
+ header?: {
1626
+ /** @description Stripe-style idempotency key. The signing secret is returned exactly once; a retry without this header creates a second webhook + secret you never see the plaintext for. 24h TTL. */
1627
+ "Idempotency-Key"?: string;
1628
+ };
1629
+ path: {
1630
+ workspace_id: string;
1631
+ };
1632
+ cookie?: never;
1633
+ };
1634
+ requestBody: {
1635
+ content: {
1636
+ "application/json": components["schemas"]["CreateWebhookDto"];
1637
+ };
1638
+ };
1639
+ responses: {
1640
+ /** @description Webhook created. Includes plaintext `signing_secret` exactly once. */
1641
+ 201: {
1642
+ headers: {
1643
+ [name: string]: unknown;
1644
+ };
1645
+ content: {
1646
+ "application/json": components["schemas"]["WebhookCreateResponseDto"];
1647
+ };
1648
+ };
1649
+ };
1650
+ };
1651
+ WebhookController_get: {
1652
+ parameters: {
1653
+ query?: never;
1654
+ header?: never;
1655
+ path: {
1656
+ workspace_id: string;
1657
+ id: string;
1658
+ };
1659
+ cookie?: never;
1660
+ };
1661
+ requestBody?: never;
1662
+ responses: {
1663
+ /** @description Webhook row. */
1664
+ 200: {
1665
+ headers: {
1666
+ [name: string]: unknown;
1667
+ };
1668
+ content: {
1669
+ "application/json": components["schemas"]["WebhookResponseDto"];
1670
+ };
1671
+ };
1672
+ /** @description Webhook not found. */
1673
+ 404: {
1674
+ headers: {
1675
+ [name: string]: unknown;
1676
+ };
1677
+ content?: never;
1678
+ };
1679
+ };
1680
+ };
1681
+ WebhookController_remove: {
1682
+ parameters: {
1683
+ query?: never;
1684
+ header?: never;
1685
+ path: {
1686
+ workspace_id: string;
1687
+ id: string;
1688
+ };
1689
+ cookie?: never;
1690
+ };
1691
+ requestBody?: never;
1692
+ responses: {
1693
+ 204: {
1694
+ headers: {
1695
+ [name: string]: unknown;
1696
+ };
1697
+ content?: never;
1698
+ };
1699
+ };
1700
+ };
1701
+ WebhookController_update: {
1702
+ parameters: {
1703
+ query?: never;
1704
+ header?: never;
1705
+ path: {
1706
+ workspace_id: string;
1707
+ id: string;
1708
+ };
1709
+ cookie?: never;
1710
+ };
1711
+ requestBody: {
1712
+ content: {
1713
+ "application/json": components["schemas"]["UpdateWebhookDto"];
1714
+ };
1715
+ };
1716
+ responses: {
1717
+ 200: {
1718
+ headers: {
1719
+ [name: string]: unknown;
1720
+ };
1721
+ content?: never;
1722
+ };
1723
+ };
1724
+ };
1725
+ WebhookController_recentDeliveries: {
1726
+ parameters: {
1727
+ query?: never;
1728
+ header?: never;
1729
+ path: {
1730
+ workspace_id: string;
1731
+ id: string;
1732
+ };
1733
+ cookie?: never;
1734
+ };
1735
+ requestBody?: never;
1736
+ responses: {
1737
+ /** @description `{ data: Array<{ id, event_id, event_type, attempt_number, status_code, response_body, error_message, latency_ms, created_at }> }` */
1738
+ 200: {
1739
+ headers: {
1740
+ [name: string]: unknown;
1741
+ };
1742
+ content?: never;
1743
+ };
1744
+ };
1745
+ };
1746
+ WebhookController_rotateSecret: {
1747
+ parameters: {
1748
+ query?: never;
1749
+ header?: never;
1750
+ path: {
1751
+ workspace_id: string;
1752
+ id: string;
1753
+ };
1754
+ cookie?: never;
1755
+ };
1756
+ requestBody?: never;
1757
+ responses: {
1758
+ 201: {
1759
+ headers: {
1760
+ [name: string]: unknown;
1761
+ };
1762
+ content?: never;
1763
+ };
1764
+ };
1765
+ };
1766
+ WebhookController_fireTest: {
1767
+ parameters: {
1768
+ query?: never;
1769
+ header?: never;
1770
+ path: {
1771
+ workspace_id: string;
1772
+ id: string;
1773
+ };
1774
+ cookie?: never;
1775
+ };
1776
+ requestBody: {
1777
+ content: {
1778
+ "application/json": components["schemas"]["TestWebhookDto"];
1779
+ };
1780
+ };
1781
+ responses: {
1782
+ 202: {
1783
+ headers: {
1784
+ [name: string]: unknown;
1785
+ };
1786
+ content?: never;
1787
+ };
1788
+ };
1789
+ };
1790
+ }
1791
+
1792
+ /**
1793
+ * Waitlist — typed `openapi-fetch` client for every endpoint in
1794
+ * `Specs/waitlist.json`. Reach for `client.GET("/v1/...")` or
1795
+ * `client.POST(...)`; request / response types come from the
1796
+ * generated `paths` interface.
1797
+ */
1798
+ declare class Waitlist {
1799
+ /** The underlying typed client. v0 surface — every endpoint reachable. */
1800
+ readonly client: ReturnType<typeof makeClient<paths>>;
1801
+ constructor(config?: PCClientConfig);
1802
+ }
1803
+
1804
+ export { Waitlist, type paths };